插入排序之折半插入法
折半插入排序算法在一定程度上可以提升插入排序的速度。
其思想是:每次把待排序元素与其前面已排好的序列的中值相比较,从而寻找最终插入的位置。找到插入位置之后将前面元素往后覆盖,随即再将待排元素插入。
举个例子:(一部分)
那么可以看到先将待排序元素放到临时变量中,将它前面已排好序列的低位置设为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; //插入位置}
}
插入排序之折半插入法相关推荐
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序...
先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...
- 排序算法(一)--插入排序法折半插入排序法
约定: 假设数据中有n个数据元素(关键字).排列算法中,将序列中各关键字值依次存放于类型为keytype的数组元素K[1], K[2], K[3], -, K[n]中. 排序结果按照数据元素(关键字) ...
- java 快速排序算法简单_排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序......
先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...
- java 折半插入排序_[Java代码] Java实现直接插入排序和折半插入排序算法示例
1 排序思想: 将待排序的记录Ri插入到已经排好序的记录R1,R2,--,R(N-1)中. 对于一个随机序列而言,就是从第二个元素开始,依次将这个元素插入到它之前的元素中的相应位置.它之前的元素已经排 ...
- 简单插入排序,折半插入排序和2路插入排序 c源码
以下三种插入排序时间复杂度均为O(n^2) 简单插入排序,简单直接.假定数组有序,插入 i, 从后往前遍历找到适合位置 j,移动 j +1 ~ i -1往后一位,插入i到j中. void insert ...
- 三种插入排序算法:直接插入排序、折半插入排序、希尔插入排序
一.直接插入排序 空间复杂度:O(1) 时间复杂度:O(n^2) 稳定性:稳定 适用性:顺序表和链表 //直接插入排序 void InsertSort1(int A[],int n){int i,j, ...
- 直接插入排序,折半插入排序,希尔排序,简单选择排序,冒泡排序,快速排序模板以及比较次数与移动次数的分析,折半搜索算法模板
#include<stdio.h> #include<time.h> #include <stdlib.h>const int maxx=1e2+1; int a[ ...
- 数据结构之插入排序:折半插入排序算法
排序算法:折半插入排序算法 思维导图: 折半插入排序算法的定义: 折半插入排序算法的原理: 折半插入排序算法的代码实现: 折半插入排序算法的性能: 思维导图: 折半插入排序算法的定义: 插入排序时查找 ...
- 算法之【折半插入法】
折半插入排序(binary insertion sort)是对插入排序算法的一种改进,采用二分法进行比较时不用一个一个比,而是"跳着选"的方式. Java算法原型: void Bi ...
最新文章
- 怎样设定目标(五)——设定目标失败的七大原因
- poj3258 River Hopscotch (二分搜索,考虑最大值最小问题)
- 树上倍增一些理解和写法
- css-样式重构-代码分享
- channelsftp 上传文件为空_SpringBoot文件上传下载篇(九)
- mysql 命令行 设置同步_MySQL同步(二) 设置同步
- 根据银行卡号查询银行名接口
- #6.3四维理论的数学模式
- python关系图谱_文本分析之制作网络关系图 Python
- QCOM 8976 porting SPI device
- Windows 11中文官方版正版下载
- Excel函数大全二《数字处理函数》
- vue使用vue-ueditor-wrap集成秀米
- html值改变频率,频率赫兹与时间的关系 赫兹(Hz)和秒怎样转换?
- 有符号数IMUL和无符号数MUL的使用
- FCPX:快速时尚视频转场Stupid Raisins Fast Pop下载
- 网络的几种分层体系结构
- 关于统计学的相关函数
- fpga.一些学习感悟以及细节方面
- 室内设计计算机考试题,12秋计算机班3dsMax室内设计期末考试试题
热门文章
- Vim编辑器实用指令
- 全能主机-全面讲解什么叫全能主机,全能主机是什么意思
- 如何用计算机寒假计划表,寒假学习计划表初一
- margin塌陷和margin合并
- Windows10 PyTorch1.5 安装教程 | 很详细
- 智慧商贸系统-新增付款信息
- rf books good
- git提交出现Another git process seems to be running in this repository, e.g. an editor opened by ....
- uniapp---常用scss样式
- 中医的肝指的是哪里?