回 帖 发 新 帖 刷新版面

主题:[原创]算法知识谱及--001:::插入排序

//插入排序算法,对集合进行原地排序
#include <stdio.h>
int main()
{
    int i, j, key;
    int sort[10] = {6, 5, 4, 9, 3, 0, 8, 2, 1, 7};
    for(i = 1; i < 10; i++){    //从集合的第2个元素开始循环
        key = sort[i];    //将第i个的元素值赋给key
        j = i - 1;
        while(j >= 0 && sort[j] > key){    //如果j下标还有元素,并且j元素大于j+1元素
            sort[j+1] = sort[j];    //交换j与j+1元素
            j--;
            sort[j+1] = key;
        }
    }
    for(i = 0; i< 10; i++){
        printf("%d\n",sort[i]);
    }
    return 0;
}

回复列表 (共3个回复)

沙发

嗯,您来了,多多交流~~
插入排序作为一种稳定的排序法,在规模比较小的情况下还是很适合的,特别是它的“半交换”特性使它的时间复杂度常系数较小。不过我不太明白为什么xfree86选择driver的时候用的冒泡,难道是因为代码更加简单?
您的代码中我觉得有个地方还可以改进下,就是在最内层循环的地方,有可能 key 已经存在于已排序的部分中,这个时候如果直接 break 掉,效率会更高一些

板凳

大侠们好,小弟是新手。我感觉好像可以把最内层while循环内的sort[j+1] = key放到while循环外面

3 楼

请问一楼的那位仁兄,我看不是很懂你说的那个将这个程序改得更高效的方法,可以指点迷津一下吗?谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册