排序算法 之 插入排序

 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("
");
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("

");
28     for (int i =0 ;i < sizeof(data)/sizeof(int) ;++i)
29     {
30         printf("%d ",data[i]);
31     }
32     printf("
");
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之后的数字都不会发生变化。
To get,you have to give.To give,you need learn to insist.If you really find it is hard for you,then you quit.But once you quit.Don't complain.
原文地址:https://www.cnblogs.com/hit-ycy/p/10852244.html