码迷,mamicode.com
首页 > 其他好文 > 详细

折半插入排序

时间:2014-06-05 17:39:25      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

思路:从数组第二个元素开始折半插入,即把第一个元素看成有序的,然后下标后移一位,直到数组最后一个元素折半插入成功,注意:数组第0号元素不存值,用来存储每次要插入的数据

步骤:1.判断要插入的元素是否处于有序状态,是则继续,否则下标后移

        2.利用折半查找要插入的下标,记为t

       3.从t开始所有数据后移一位,插入已经标记在a[0]的元素


 

bubuko.com,布布扣
//length为数组长度(0号下标不存值,不计算在长度中)
void insert(int *a,int length)
{
    for(int i=2;i<=length;i++)//从第二个元素到最后一个元素依次插入
    {
        if(a[i]<a[i-1])//判断要插入的元素是否小于前一个元素,是则无序,否则有序,无需插入
        {
            //折半查找要插入位置的下标
            int low=1,high=i-1;
            a[0]=a[i];//a[0]用来标记元素
            //折半查找要插入的下标位置
            while (low<=high)
            {
                int mid=(low+high)/2;
                if(a[mid]<a[0])
                    low=mid+1;
                else
                    high=mid-1;
            }
            //循环结束,low为要插入的下标,使low之后的元素统一向后移一位
            for(int j=i-1;j>=low;j--)
                a[j+1]=a[j];
            a[low]=a[0];//插入已经标记的元素
        }
    }
}
bubuko.com,布布扣

 

 

 

折半插入排序,布布扣,bubuko.com

折半插入排序

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/runninglzw/p/3768626.html

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