zoukankan      html  css  js  c++  java
  • 折半插入排序算法的C++实现

    折半插入排序思想和直接插入排序类似。

    1)找到插入位置;

    2)依次后移正确位置后面的元素。

    区别是查找插入位置的方法不同。

    折半插入排序使用的折半查找法在一个已经有序的序列中找到查找位置。

    注意,折半查找法的一个基本条件就是序列已经有序

    直接上代码:

    #include<iostream>
    using namespace std;
    
    void binaryInsertionSort(int arr[],int n){
    
        int mid;
        for(int i=1;i<n;i++){
            int low=0,high=i-1;//将要插入的元素复制出来
            int temp=arr[i];
            //当low>high时,证明折半查找结束
            while(low<=high){
                mid=(low+high)/2;
                //每次和折半查到的元素比较大小
                //当待插入元素比折半查到的元素小时,那么正确插入位置在低半区;否则在高半区
                if(arr[i]<arr[mid])
                    high=mid-1;
                else
                    low=mid+1;
        }
            //由折半查找到的正确插入位置为high+1
            //将high+1后面的元素依次后移
            for(int j=i-1;j>=high+1;j--)
                arr[j+1]=arr[j];
            //在正确位置插入复制出来的待插入元素
            arr[high+1]=temp;
        }
        
    }
    
    int main(){
    
        int a[10]={10,9,8,7,6,5,4,3,2,1};
        binaryInsertionSort(a,10);
        for(int i=0;i<10;i++){
            cout<<a[i]<<" ";
        }
        cout<<endl;
        return 0;
    
    }
  • 相关阅读:
    腾讯一面有感(移动开发岗位)
    kafka 在java中的使用
    Kafka史上最详细原理总结下
    java jdk原生的http请求工具类
    kafka(一)
    MySQL:互联网公司常用分库分表方案汇总
    密码正则
    springboot 打war包
    oracle存储过程的一些使用
    对象的深度克隆
  • 原文地址:https://www.cnblogs.com/dudududu/p/8516088.html
Copyright © 2011-2022 走看看