时光飞逝~

插入排序
 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 }
View Code

以升序排列为例

原理:一个元素必然是有序的,然后第二个元素和第一个元素比较插入,然后第三个元素和前两个元素比较插入。。。。

难点:1.将需要插入的元素备份到另一个地址空间,假设代表该地址空间的变量为key

   2.找到插入的位置的过程中将比key大的元素后移一位

   3.将key插入

注意点:应为for循环的时候j--最后多减了一次,所以代码中a[j+1] = key;

posted on 2013-07-09 23:17  时光飞逝~  阅读(133)  评论(0)    收藏  举报