排序算法 之 插入排序

 1 #include <iostream>
 2 using namespace std;
 3 void insertSort(int data[],int length)
 4 {
 5 
 6     for(int i = 1,j; i < length ;i++)
 7     {
 8         int temp = data[i];
 9         for ( j = i; j > 0&&temp < data[j-1]; j--)
10         {
11             data[j] = data[j-1];
12         }
13         data[j] = temp;
14         for (int ii = 0 ; ii < length ;ii++)
15         {
16             printf("%d ",data[ii]);
17         }
18         printf("\n");
19 
20     }
21 
22 }
23 int main()
24 {
25     int data[] = {2,5,1,4,0,-3,59,-78,62,3};
26     insertSort(data,sizeof(data)/sizeof(int));
27     printf("\n\n");
28     for (int i =0 ;i < sizeof(data)/sizeof(int) ;++i)
29     {
30         printf("%d ",data[i]);
31     }
32     printf("\n");
33     return 0;
34 }

从第二个元素开始,依次比较,如果比前面的数小,就替换,直到比到比前面的数字大。所以没经过一次比较,第一个数字总是比较完的这几个数字中最小的一个。

最后输出结果为:

2 5 1 4 0 -3 59 -78 62 3
1 2 5 4 0 -3 59 -78 62 3
1 2 4 5 0 -3 59 -78 62 3
0 1 2 4 5 -3 59 -78 62 3
-3 0 1 2 4 5 59 -78 62 3
-3 0 1 2 4 5 59 -78 62 3
-78 -3 0 1 2 4 5 59 62 3
-78 -3 0 1 2 4 5 59 62 3
-78 -3 0 1 2 3 4 5 59 62

-78 -3 0 1 2 3 4 5 59 62
请按任意键继续. . .
 
将每次比较后的结果都打印了出来,便于我们理解整个程序。你会发现,每次比较,i之后的数字都不会发生变化。

posted on 2019-05-12 14:43  逆光也很美  阅读(141)  评论(0编辑  收藏  举报

导航