• 【模板小程序】二分法插入排序


    Java版源程序来自:http://www.cnblogs.com/PerkinsZhu/p/5674572.html,在此感谢。

     1 #include <iostream>
     2 #include <vector>
     3 #include <string>
     4 using namespace std;
     5 
     6 void printArray(string str,vector<int>& array){
     7     cout<<str;
     8     for(int val:array){
     9         cout<<val<<" ";
    10     }
    11     cout<<endl;
    12 }
    13 
    14 void binaryInsertionSort(vector<int>& array) {
    15     printArray("原数组:", array);
    16     int time=0;
    17     for (int i = 1; i < (int)array.size(); ++i) {
    18         int temp = array[i];
    19         int right = i - 1;
    20         int left = 0;
    21         int mid;
    22         // 定位
    23         while (left <= right) {
    24             //mid = (left + right) / 2;
    25             mid = left+(right-left)/2;
    26             if (array[mid] > temp) {
    27                 right = mid - 1;
    28             } else if (array[mid] < temp) {
    29                 left = mid + 1;
    30             }
    31         }
    32         // 移动数组
    33         for (int j = i; j > left; j--) {
    34             array[j] = array[j - 1];
    35         }
    36         // 在找到的位置插入
    37         array[left] = temp;
    38         printArray("" + to_string(++time) + "次循环排序结果: ", array);
    39     }
    40 }
    41 
    42 int main()
    43 {
    44     vector<int> v={21,8,2,18,0,9,27,12,5,24};
    45     binaryInsertionSort(v);
    46     return 0;
    47 }

    运行结果:

    原数组:21 8 2 18 0 9 27 12 5 24
    第1次循环排序结果: 8 21 2 18 0 9 27 12 5 24
    第2次循环排序结果: 2 8 21 18 0 9 27 12 5 24
    第3次循环排序结果: 2 8 18 21 0 9 27 12 5 24
    第4次循环排序结果: 0 2 8 18 21 9 27 12 5 24
    第5次循环排序结果: 0 2 8 9 18 21 27 12 5 24
    第6次循环排序结果: 0 2 8 9 18 21 27 12 5 24
    第7次循环排序结果: 0 2 8 9 12 18 21 27 5 24
    第8次循环排序结果: 0 2 5 8 9 12 18 21 27 24
    第9次循环排序结果: 0 2 5 8 9 12 18 21 24 27

    二分查找就是把插入位置的寻找过程由原来的顺序查找改成了二分查找,效率很高。

    『注:本文来自博客园“小溪的博客”,若非声明均为原创内容,请勿用于商业用途,转载请注明出处http://www.cnblogs.com/xiaoxi666/』
  • 相关阅读:
    Metastore
    深入解析Docker 架构原理
    python之qrcode模块生成二维码
    python flask socketio uwsgi和nginx supervisor配置方式
    python socketio客户端与服务端连接方式
    升级 elementui 2.15.7 后遇到 eldatepicker 警告问题
    flutter 签名和获取应用签名
    汽车螺丝扭力标准
    测试团队绩效考核指标
    java笔记
  • 原文地址:https://www.cnblogs.com/xiaoxi666/p/7469588.html
Copyright © 2020-2023  润新知