排序之折半插入排序
来源:互联网 发布:音频切换矩阵 编辑:程序博客网 时间:2024/06/07 05:04
简介
二分查找(折半插入)排序属于插入类排序的一种,可以说是直接插入排序的一种改进版:主要改进在查找插入位置上节省了时间。
直接插入排序需要依次在有序的序列里进行比较,较大值右移一直到找到合适的位置进行插入。
二分查找排序节省了查找的时间。对于一个有序的序列来说,采用二分查找的方式来找到插入点比直接便利比较所费的时间少。使用二分查找排序找到插入点之后,依次后移插入点之后的数据,然后将要插入的值放进去,完成一次插入操作。
二分查找排序思想
二分查找排序主要基于对查找插入位置的时间进行优化,使用二分查找来缩短插入位置的查找时间。对于待排序的一个序列来说,假设要插入的是第N个数,则说明前N-1个数已经为有序,那么我们需要将第N个数插入到前N-1个数的序列中。
那么我们根据第N个数的值可以使用二分查找来找到前N-1个数的插入点位置。之后将插入点之后的值依次后移一位。最后将第N个值插入。这样,我们完成了依次插入过程,之后依次将剩余数字按照如上方式进行插入,最后实现序列有序。
二分查找排序代码
private static void binaryInsertSort(int[] array) { if (array == null || array.length == 0) { return; } int length = array.length; int temp = 0; int pre = 0; int last = 0; for (int i = 1; i < length; i++) { //要插入的值 temp = array[i]; pre = 0; last = i - 1; while (pre <= last) { int middle = (pre + last) >> 1; if (temp > array[middle]) { pre = middle + 1; } else if (temp < array[middle]) { last = middle - 1; } } //找到插入位置之后,将插入点之后的数据后移一位 for (int j = i - 1; j >= pre; j--) { array[j + 1] = array[j]; } array[pre] = temp; } }
总结
折半插入排序其实就是直接插入排序的一种改进,引入了二分查找算法,这样关键字的比较次数就会减少,数量级为O(nlog^2n),但是元素移动次数还是O(n^2),所以折半插入排序的时间复杂度是O(n^2)。
另外,折半插入排序是稳定的排序算法;
阅读全文
0 0
- 排序之折半插入排序
- 插入排序之折半插入排序
- 7 -- 插入排序之折半插入排序
- 插入排序之折半插入排序-binaryinsertsort
- 插入排序之折半插入排序
- 插入排序之--折半插入排序
- 插入排序之折半插入排序
- 数据结构之 折半插入排序
- 插入排序之直接插入排序和折半插入排序
- 排序算法之二 折半插入排序
- 排序算法总结之折半插入排序
- 插入排序之折半排序Java实现
- 排序算法之折半插入排序
- 排序算法之折半插入排序
- 排序算法之折半插入排序
- 常用排序算法之折半插入排序
- 排序:折半插入排序
- 排序--折半插入排序
- python高级特性与高阶函数
- 基于jQuery的遍历同id元素 并响应事件的代码
- “一一配对”概念让5千年都无人能识的自然数一下子暴露出来 ——无穷集{0,1,2,…,p,…}只是N的真子集
- 字符编码
- js 策略模式
- 排序之折半插入排序
- 疑难杂症---共享打印机驱动安装失败0x00000bcb错误
- NodeJs抓取页面html()方法乱码
- Centos下YUM安装PHP的两种方式
- Android自定义View初体验,实现圆形TextView的三种方式
- Bokeh 布局图像和工具
- Spark Streaming 实时监控一个HDFS的文件夹,当新的文件进来(名字不能重复),将对新文件进行处理。
- React Native 中组件的生命周期
- PHP加密技术