zoukankan      html  css  js  c++  java
  • 【模板小程序】二分法插入排序

    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/』
  • 相关阅读:
    IE6-IE11兼容性问题列表及解决办法
    EJB--事务管理 .
    JDBC批处理---(java 对数据库的回滚) .
    redisb并发访问慢出现的问题
    redis其他问题
    多线程实现服务器端接收连接
    序列化作用
    redis的key过期时间
    nginx负载均衡和反向代理有什么区别
    nginx的负载均衡和反响代理配置
  • 原文地址:https://www.cnblogs.com/xiaoxi666/p/7469588.html
Copyright © 2011-2022 走看看