插入排序
1 template <typename T> 2 void InsertSort(T *a, int nCount) 3 { 4 for(int i=1;i<nCount;i++) 5 { 6 T key = a[i]; 7 int j = 0; 8 for(j=i-1;j>=0 && key<a[j];j--) 9 { 10 a[j+1] = a[j]; 11 } 12 a[j+1] = key; 13 } 14 15 } 16 int main(int argc, char* argv[]) 17 { 18 int a[] = {4,5,7,3,2,1}; 19 InsertSort(a,sizeof(a)/sizeof(int)); 20 for(int i=0;i<6;i++) 21 printf("%d ",a[i]); 22 printf("\n"); 23 return 0; 24 }
以升序排列为例
原理:一个元素必然是有序的,然后第二个元素和第一个元素比较插入,然后第三个元素和前两个元素比较插入。。。。
难点:1.将需要插入的元素备份到另一个地址空间,假设代表该地址空间的变量为key
2.找到插入的位置的过程中将比key大的元素后移一位
3.将key插入
注意点:应为for循环的时候j--最后多减了一次,所以代码中a[j+1] = key;
浙公网安备 33010602011771号