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

    //  main.cpp
    
    //  BinaryInsertSort
    
    //  Created by Jason on 16/9/22.
    
    //  Copyright © 2016年 Jason. All rights reserved.
    
    #include <iostream>
    
    using namespace std;
    
    #define ARR_SIZE(array,len)(len = (sizeof(arr)/sizeof(arr[0])));
    
    //折半查找代码如下:
    
    /**
    
     折半查找原理:
    
        百度百科:http://baike.baidu.com/link?url=uxMHSYOcdy9RUc6ooMe_K4rbeg6zTIcaoQ3Jkcuve_NP89P-atvjG16ZoCiAw40xJgH9TMNKHflHwl7BLn1Z2NB-Na-zbIVtczksUUC65xZjOuIEIUagDjhrkEoet2vInr-f3cjI92XwTmBzKa0mC23T7sFqBPTFgFlkYlt-eyKY6GjN7Upr6NitRmXDRF2B
    
     折半插入排序原理
    
        百度百科:
    
        http://baike.baidu.com/link?url=7hiQinaLychnjNHoBBUEA3Xyivln5hPiDrv8nVPYJSNlKIYbpk4gx-pEmzBKNlPyyzEZvWwNitny81xpj1b_Nq
    
    **/
    
    void BinaryInsertSort(int array[],int n)//传递数组和数组元素个数
    
    {
    
        int i,j,mid,low,high,temp;
    
        for(i = 1;i < n; ++i)//我看了一些其他人写得折半插入算法是从下标1开始的,i = 2;i <=n,并将array[i]存储到array[0]
    
        {
    
            temp = array[i];//把第i+1个元素赋值给temp(数组从下标0开始)
    
            low = 0;//初始化low,array[low]代表数组中第1个元素
    
            high = i;//初始化high,array[high]代表已插入的最后一个元素
    
            while(low <= high) //不断的折半1/2 1/4 ....
    
            {
    
                mid = (low + high) / 2;//计算中间位置
    
                if (temp > array[mid])
    
                {
    
                    //插入值大于中间值
    
                    low = mid + 1;
    
                }else{
    
                    //插入值小于中间值
    
                    high = mid - 1;
    
                }
    
            }
    
            for(j=i-1;j >= low; --j)
    
            {
    
                //将需要移动的数组向后移
    
                array[j+1] = array[j];
    
            }
    
            //将值插入到指定位置
    
            array[low] = temp;
    
        }
    
    }
    
    int main(int argc, const char * argv[]) {
    
        int arr[] = {6,12,8,1,15,11,3,7,4,13};
    
        int len;
    
        ARR_SIZE(arr,len);
    
        BinaryInsertSort(arr,len);
    
        for(int i=0;i<len;i++)
    
        {
    
            cout << arr[i] << " ";
    
        }
    
        cout << endl;    
    
        
    
    }
    

      

  • 相关阅读:
    设置Kali Linux虚拟机连接网络
    修改Kali Linux终端主题
    Kali Linux修改桌面默认图标
    Metasploit技巧命令支持tips
    修改Kali Linux终端历史记录大小
    ListView 实现进度条显示
    Delphi 10.3.2 社区版的安装
    VMWare 下安装 Windows XP
    重新认识 Delphi
    VMWare 下安装 MSDN版 MS-DOS 6.22
  • 原文地址:https://www.cnblogs.com/jasonxu19900827/p/5912323.html
Copyright © 2011-2022 走看看