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
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之后的数字都不会发生变化。