简单排序算法时间空间复杂度分析及应用(4)-二分插入排序
来源:互联网 发布:python 列表推导式 编辑:程序博客网 时间:2024/05/22 02:23
简单排序算法时间空间复杂度分析及应用(4)-二分插入排序
背景:
顾名思义,这个二分插入排序是直接插入排序的进化版,主要变化的地方就是在内循环部分,即外循环的循环节点在确定区域的位置查询方式由原来的直接循环比较变为二分法的方式来查询,在这确定区域数据都是已经排好序了的。
分析:
这种插入排序属于插入排序中的先确定插入位置,后进行插入操作,因此在内循环中有两个同级别的循环体。
代码实现:
/* * 二分法插入排序(binary insert Sort) * 时间复杂度为O(n的平方) ,最好的情况是元素交换次数为0,元素比较次数为n-1。 * @param sortOrder true表示增序,FALSE表示降序 * 第一种插入排序:这种插入排序有查找节点的步骤,采用的是二分法查询,这种查询方式只能在确定区域使用 * 这一种插入排序:插入排序改进,同级别的内循环有两个,第一个是获取插入位置,第二个是移动确定区域元素 */public static void insertSortBinary(boolean sortOrder){int k ;for(int m = 1 ; m < array.length ; ++m){//for(n = m - 1 ; n >= 0 ; --n)//if((array[m] > array[n]&&sortOrder)||(array[m] < array[n]&&!sortOrder))//break;/* * 二分法查询 */int p , q , mid;p = 0 ;//确定区域起点q = m-1;//确定区域终点//错误点:我本来设计的就是可以相等,却没在这个不等式中表现出来!while(p <= q){mid = (p+q)/2;if((array[mid] < array[m]&&sortOrder)||(array[mid] > array[m]&&!sortOrder)){p = mid + 1;}else {q = mid - 1;}}int z ;k = array[m];for(z = m-1 ; z > p - 1 ; --z)array[z+1] = array[z];//if(array[m]!=k)array[z+1] = k;}}
使用场景:
二分法插入排序和之前的一种直接插入排序几乎一样,只是这个插入排序中的插入位置查询模块使用了二分法查询,这种插入排序适用于n数据量大且无序的情况,这样会大大减少查询的时间,从而为整个插入排序节省时间,但是当大部分数据块都是已排序的,使用二分法就不如直接插入排序来得好。
图文解析:
这属于插入排序的一种,图文分析和之前的插入排序都一样,可参考之前的插入排序图文分析。
阅读全文
0 0
- 简单排序算法时间空间复杂度分析及应用(4)-二分插入排序
- 简单排序算法时间空间复杂度分析及应用(2)-插入排序
- 简单排序算法时间空间复杂度分析及应用(6)-鸡尾酒排序(双冒泡排序)
- 简单排序算法时间空间复杂度分析及应用(1)-冒泡排序
- 简单排序算法时间空间复杂度分析及应用(3)-快速排序
- 简单排序算法时间空间复杂度分析及应用(5)-堆排序
- 简单排序算法时间空间复杂度分析及应用(7)-希尔排序
- 简单排序算法时间空间复杂度分析及应用(8)-归并排序
- 插入排序算法的java实现及时间复杂度分析
- 算法 插入排序 的 JS实现及时间复杂度分析
- 常用排序算法的时间和空间复杂度及算法时间复杂度的简单计算
- 常用排序算法--冒泡排序及改进和插入排序时间复杂度分析
- 各种排序算法及时间&空间复杂度详解(一)简单排序算法
- 各种排序算法时间复杂度和空间复杂度分析
- 各种排序算法时间复杂度及空间复杂度
- 各种排序算法比较及时间复杂度,空间复杂度
- 堆排序算法及时间复杂度分析
- 排序算法之 插入排序、希尔(shell)排序 及其时间复杂度和空间复杂度
- NG2动画
- ORA-00942: 表或视图不存在
- Lua 文件 I/O (读取文件路径注意)
- 发送邮件分类
- 世界十大哲学难题
- 简单排序算法时间空间复杂度分析及应用(4)-二分插入排序
- zookeeper shell 命令
- List入库,把List1中的数据入库到List2中
- layout_gravity 和 gravity 并且 layout_alignRigh和layout_toRightOf
- CSDN日报20170620——《找一个好工作,谈一份好薪水》
- Ubuntu 14.04 opencv 2.4.9 安装
- 第七篇 定义类成员
- 入门篇(1)使用Python对NAO机器人编程
- linux驱动程序