zoukankan      html  css  js  c++  java
  • ZT 二分插入排序也称折半插入排序

     二分插入排序也称折半插入排序,基本思想是:设数列[0....n]分为两部分一部分是[0...i]为有序序列,另一部分是[i+1.....n]为无序序列,从无序序列中取一个数 x ,利用二分查找算法找到 x 在有序序列中的插入位置并插入,有序序列还是有序的,接下来重复上述步骤,直到无序序列全部插入有序序列 ,这是整个序列只剩下有序序列即有序了。

     

    01 void  BinaryInsertSort(int *pArray, int len)
    02 {
    03   //刚开始设有序序列只有一个元素 pArray[0],无序序列为[1...n]了
    04   for( int i = 1; i < len; i++)
    05   {
    06      //无序序列元素与有序序列比较(从有序列最后一个元素往前比较)
    07      if(pArray[i] >= pArray[i - 1])
    08      {
    09        continue;
    10      }
    11      //当无序序列元素比有序序列最后一个元素小时,利用二分查找法在有序序列中查找插入位置
    12      int low = 0;
    13      int high = i - 1;
    14      int mid = 0;
    15      int temp = pArray[i];
    16      while(low <= high)
    17      {
    18        mid = (low + high) / 2;
    19        if(temp >= pArray[mid])
    20        {
    21           low = mid + 1;
    22        }
    23        else //(temp < pArray[mid])
    24        {
    25           high = mid - 1;
    26        }
    27      }
    28      //low位置就是要插入的位置,所以low到i之间的元素都需要往后移动一个位置
    29      int j = i;
    30      if(j > low)
    31      {
    32        pArray[j] = pArray[j - 1];
    33        j--;
    34      }
    35      //把无序序列中的pArray[i]放到有序序列中low的位置,这样就完成了无序序列 i 位置的数插入了有序序列中
    36      pArray[low] = temp;
    37   }
    38  
    39 }
  • 相关阅读:
    js中的数据类型和判断数据类型
    MVC,MVVM,MVP等设计模式的分析
    mvc框架详解
    插件推荐系列
    响应式区间
    js短路原理:&&, ||
    不错的表单样式
    测试ip
    Python模拟登陆万能法
    iphone 端 ipunt输入框光标偏移
  • 原文地址:https://www.cnblogs.com/jeanschen/p/3538901.html
Copyright © 2011-2022 走看看