• 折半插入排序


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

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

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

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


    //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];//插入已经标记的元素
            }
        }
    }
  • 相关阅读:
    javascript进阶一
    javascript基础
    前端开发工程师——网易云课堂
    win10,软件, 发布者不受信任怎么办
    oracle10g如何配置客户端
    ASPxGridView中DetailRow的使用
    vb中&和+的区别
    nvl
    substr
    ORA-01791: 不是 SELECTed 表达式
  • 原文地址:https://www.cnblogs.com/runninglzw/p/3768626.html
Copyright © 2020-2023  润新知