zoukankan      html  css  js  c++  java
  • 折半插入排序

    折半插入排序:没有哨兵的概念。a[0]只要是保存待插入元素

    改善:减少了元素之间的比较次数,但是元素之间的移动次数没有改变。

    #include<iostream>
    using namespace std;
    void  BInsertSort(int a[],int length){
             int i,j;
             int low,high;
             for(i=2;i<=length;i++){
                 a[0]=a[i];
                 if(a[i-1]>a[0]){
                                        //保存待插入元素
                      low=1; high=i-1;
                      while(low<=high){
                         int mid=(low+high)/2;
                         if(a[mid]>a[0])    //在低半区
                             high=mid-1;
                         else
                             low=mid+1;                  //高半区,即便是等于也是高半区,待插入元素在其后
                      }
                      for(j=i-1;j>=high+1;j--){
                          a[j+1]=a[j];
                      }
                      a[high+1]=a[0];//high+1总是待插入元素的应该插入的位置,high是最后一个不该移动的位置
                 }
             }
    }
    int  main(void)
    {
        int a[7]={0,4,5,5,9,10,8};
        BInsertSort(a,6);
    }
    
                                
                                   
                       


  • 相关阅读:

    list集合
    接口
    抽取对象的基本方法
    访问修饰符
    构造方法
    如何弹出一个对话框
    nginx反代配置
    TreeMap排序
    BeanPropertyRowMapper
  • 原文地址:https://www.cnblogs.com/kkshaq/p/4517383.html
Copyright © 2011-2022 走看看