折半插入排序算法在一定程度上可以提升插入排序的速度。
其思想是:每次把待排序元素与其前面已排好的序列的中值相比较,从而寻找最终插入的位置。找到插入位置之后将前面元素往后覆盖,随即再将待排元素插入。
举个例子:(一部分)

那么可以看到先将待排序元素放到临时变量中,将它前面已排好序列的低位置设为low=left,高位置设为 high=i-1,那么每次取的中值就是mid=(low+high)/2,然后用临时变量与arr[mid] 比较,在低位置小于等于高位置时,如果临时变量小于中值,则high=mid-1,反之low=mid+1
low>high的时候,就说明已找到插入位置。
代码实现如下:

//折半插入排序
void Sort(int *arr,int left,int right)
{for (int i = left + 1; i < right; i++){int temp = arr[i]; //用临时变量存放待排数据int low = left;int high = i - 1;while (low <= high){int mid = (low + high) / 2;if (temp < arr[mid]){high = mid - 1;}else {low = mid + 1;}}for ( int j = i-1; j >= high + 1; j--){arr[j+1] = arr[j];}arr[high + 1] = temp; //插入位置}
}

插入排序之折半插入法相关推荐

  1. 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序...

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  2. 排序算法(一)--插入排序法折半插入排序法

    约定: 假设数据中有n个数据元素(关键字).排列算法中,将序列中各关键字值依次存放于类型为keytype的数组元素K[1], K[2], K[3], -, K[n]中. 排序结果按照数据元素(关键字) ...

  3. java 快速排序算法简单_排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序......

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  4. java 折半插入排序_[Java代码] Java实现直接插入排序和折半插入排序算法示例

    1 排序思想: 将待排序的记录Ri插入到已经排好序的记录R1,R2,--,R(N-1)中. 对于一个随机序列而言,就是从第二个元素开始,依次将这个元素插入到它之前的元素中的相应位置.它之前的元素已经排 ...

  5. 简单插入排序,折半插入排序和2路插入排序 c源码

    以下三种插入排序时间复杂度均为O(n^2) 简单插入排序,简单直接.假定数组有序,插入 i, 从后往前遍历找到适合位置 j,移动 j +1 ~ i -1往后一位,插入i到j中. void insert ...

  6. 三种插入排序算法:直接插入排序、折半插入排序、希尔插入排序

    一.直接插入排序 空间复杂度:O(1) 时间复杂度:O(n^2) 稳定性:稳定 适用性:顺序表和链表 //直接插入排序 void InsertSort1(int A[],int n){int i,j, ...

  7. 直接插入排序,折半插入排序,希尔排序,简单选择排序,冒泡排序,快速排序模板以及比较次数与移动次数的分析,折半搜索算法模板

    #include<stdio.h> #include<time.h> #include <stdlib.h>const int maxx=1e2+1; int a[ ...

  8. 数据结构之插入排序:折半插入排序算法

    排序算法:折半插入排序算法 思维导图: 折半插入排序算法的定义: 折半插入排序算法的原理: 折半插入排序算法的代码实现: 折半插入排序算法的性能: 思维导图: 折半插入排序算法的定义: 插入排序时查找 ...

  9. 算法之【折半插入法】

    折半插入排序(binary insertion sort)是对插入排序算法的一种改进,采用二分法进行比较时不用一个一个比,而是"跳着选"的方式. Java算法原型: void Bi ...

最新文章

  1. 怎样设定目标(五)——设定目标失败的七大原因
  2. poj3258 River Hopscotch (二分搜索,考虑最大值最小问题)
  3. 树上倍增一些理解和写法
  4. css-样式重构-代码分享
  5. channelsftp 上传文件为空_SpringBoot文件上传下载篇(九)
  6. mysql 命令行 设置同步_MySQL同步(二) 设置同步
  7. 根据银行卡号查询银行名接口
  8. #6.3四维理论的数学模式
  9. python关系图谱_文本分析之制作网络关系图 Python
  10. QCOM 8976 porting SPI device
  11. Windows 11中文官方版正版下载
  12. Excel函数大全二《数字处理函数》
  13. vue使用vue-ueditor-wrap集成秀米
  14. html值改变频率,频率赫兹与时间的关系 赫兹(Hz)和秒怎样转换?
  15. 有符号数IMUL和无符号数MUL的使用
  16. FCPX:快速时尚视频转场Stupid Raisins Fast Pop下载
  17. 网络的几种分层体系结构
  18. 关于统计学的相关函数
  19. fpga.一些学习感悟以及细节方面
  20. 室内设计计算机考试题,12秋计算机班3dsMax室内设计期末考试试题

热门文章

  1. Vim编辑器实用指令
  2. 全能主机-全面讲解什么叫全能主机,全能主机是什么意思
  3. 如何用计算机寒假计划表,寒假学习计划表初一
  4. margin塌陷和margin合并
  5. Windows10 PyTorch1.5 安装教程 | 很详细
  6. 智慧商贸系统-新增付款信息
  7. rf books good
  8. git提交出现Another git process seems to be running in this repository, e.g. an editor opened by ....
  9. uniapp---常用scss样式
  10. 中医的肝指的是哪里?