先把代码列一下,看了大半个晚上,请教了bi的高手才搞了个大概明白,不容易啊:
[root@vm c-study]# cat -n sort.c
1 #include
2
3 #define LEN 5
4 int a[LEN] = { 10, 5, 2, 4, 7 };
5
6 void insertion_sort(void)
7 {
8
9 int i,j,key;
10 for (i=1; i 11 printf("%d, %d, %d, %d, %d\n",
12 a[0], a[1], a[2], a[3], a[4]);
13
14 key = a[i];
15 j = i-1;
16 while (j >= 0 && a[j] >key){
17 a[j+1] = a[j];
18 j--;
19 }
20 a[j+1] = key;
21 }
22
23 printf("%d, %d, %d, %d, %d\n",
24 a[0], a[1], a[2], a[3], a[4]);
25
26 }
27
28 int main(void)
29 {
30 insertion_sort();
31 return 0;
32 }
《一站式》上面引用了《算法导论》上面的打牌的图片,来说明插入排序的思想,总结一下要点:
1、整个排序有两层循环,第一层从原始数据(数组a)的第二个元素开始
2、在进行第二层循环之前,先把需要排序的元素赋给key,用这个key去和前面的元素逐个去比较,知道前面的某一个不再比key大,这时候就把a[j+1]的值设为key,否则的话,前面的值都后移
3、算法中关键的思想是先赋值,对前面的元素,依次根据对这个值的比较进行后移,最后找到在何处把key插入,这样完成排序。
阅读(488) | 评论(0) | 转发(0) |