码迷,mamicode.com
首页 > 编程语言 > 详细

插入排序

时间:2015-06-02 10:56:55      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

下面我们来讲一下插入排序

基本思想如下:

将一个记录插入到已排序好的有序表中,从而得到一个新的有序表。实现要点,我们需要设立一个哨兵,作为临时存储和判断数组边界来用。直接插入的代码如下:

 1  for(i=1;i<n;i++)
 2     {
 3         //如果第i个元素大于第i-1元素,直接插入
 4         //否则,移动有序表后再插入
 5         if(a[i]<a[i-1])
 6         {
 7             j=i-1;
 8             x=a[i];//复制为哨兵
 9             a[i]=a[i-1];//先后移一个元素
10             while(x<a[j])//查找要插入的位置
11             {
12                 a[j+1]=a[j];//元素后移
13                 j--;
14             }
15             a[j+1]=x;//插入到正确位置
16         }
17     }

直接插入算法的时间复杂度为O(n^2)。

改进算法可以用折半插入排序。因为插入排序要求对已经有序的表进行插入,我们可以用折半查找法来查找要插入的位置。代码如下:

 1  for(i=1;i<n;i++)
 2    {
 3     int temp=a[i];
 4     int low=0 5     int high=i-1;
 6     while(low<=high)//查找要插入的位置
 7     {
 8         int mid=(low+high)/2;
 9         if(temp<a[mid])//在左(低)半区找
10             high=mid-1;
11         else//在右(高)半区找
12             low=mid+1;
13     }
14     for(j=i;j>=low;j--)
15     {
16         a[j]=a[j-1];//元素后移
17     }
18     a[low]=temp;//插入
19    }

 

插入排序

标签:

原文地址:http://www.cnblogs.com/sdutmyj/p/4545577.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!