简单排序算法时间空间复杂度分析及应用(4)-二分插入排序
简单排序算法时间空间复杂度分析及应用(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数据量大且无序的情况,这样会大大减少查询的时间,从而为整个插入排序节省时间,但是当大部分数据块都是已排序的,使用二分法就不如直接插入排序来得好。
图文解析:
这属于插入排序的一种,图文分析和之前的插入排序都一样,可参考之前的插入排序图文分析。
talk is cheap ,show you the code and the doc,更多的分享内容请关注我的工作号:大白共图社。公众号会有很多的github开源社区拿来即用项目源码以及相关的文章。欢迎关注。
简单排序算法时间空间复杂度分析及应用(4)-二分插入排序相关推荐
- 简单排序算法时间空间复杂度分析及应用(7)-希尔排序
希尔排序,属于插入排序的一种,是直接插入排序的加强版.在希尔排序中引入了步长(gap)的概念,然而在插入排序中,步长默认为1.正如我们直接堆插入排序的分析,数据集合的排列顺序对插入排序的效率会由很大的 ...
- 排序算法:简单选择排序算法实现及分析
简单选择排序算法介绍 简单选择排序(Simple Selection Sort)就是通过n-1次关键字排序之间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1<=i<=n)记 ...
- 认识复杂度和简单排序算法
认识复杂度和简单排序算法 常数时间操作 int a =arr[i]; 是一个常数操作 int b=list.get(i); 不是一个常数操作,为了得到b的值只能从左到右进行遍历,逻辑上是一个线性表示, ...
- 简单排序算法(Java实现)
简单排序算法:冒泡排序,选择排序,插入排序 一.冒泡排序 1.1 原理: 从第一个数据开始,与第二个数据相比较,如果第二个数据小于第一个数据,则交换两个数据的位置 指针由第一个数据移向第二个数据,第二 ...
- 数据结构实验:内部排序算法的性能分析
文章目录 前言 一.问题描述 二.问题分析 三.实验结果及分析 (1)实验数据描述 (2)实验结果 (3)性能分析 四.源代码 前言 记录下本学期的数据结构实验 本实验主要集中于比较几种内部排序算法 ...
- 算法:三种简单排序算法
排序算法比較常见的有:冒泡排序.简单选择排序.直接插入排序:希尔排序.堆排序.归并排序和高速排序算法等. 今天先学习一下前面三种比較简单的算法.排序的相关概念: ①排序的稳定性:两个或多个元素相等.排 ...
- 排序算法:希尔排序算法实现及分析
希尔排序算法介绍 希尔排序是D.LShell 与1957年提出来的一种排序算法,在这之前排序算法的时间复杂度都是O(n^2),希尔排序算法是突破这个时间复杂度的第一批算法之一.我们知道直接插入排序算法 ...
- python sort 部分元素_Python 简单排序算法-选择、冒泡、插入排序实现
写文章主要是记录自己每天学习的东西,本篇文章主要介绍数据结构中常用的简单的排序算法,虽然这些算法用Python实现起来不是十分的高效,不如c.java之类的运行速度快,应用Python实现主要是为了: ...
- 简单排序算法设计(Java)
总共有八种排序算法,还是慢慢看吧 1.简单排序算法 简单排序算法就是设置标兵,逐个比较数,然后查找插入位置,插入 public static void p(int[] a){for(int i=0;i ...
最新文章
- php中自己写的类放哪里,class类 - ThinkPHP 3.2.3,我有一个class,应该放在哪里?
- 快讯!Sharding-Sphere正式进入Apache孵化器
- 扩展springmvc组件——当页面跳转时,需要在Controller里面创建一个空方法去跳转或者是创建一个配置类 ||日期格式化说明||自定义格式化器||消息转化器扩展fastjson
- 2019.2.14 t3 车辆销售
- my appointment Fiori customizing里的Calendar checkbox的实现逻辑
- django学习笔记之forloop
- 51Nod--1100-斜率最大
- C语言 · 数的读法
- Spring 使用注解注入 学习(四)
- swift基础知识一
- 微信聊天记录导出(2020新版)
- linux hd4000显卡驱动,AMD 即将放弃 Radeon HD2000/3000/4000 系列显卡的驱动支持
- Detours学习之十二:Detours API用于修改二进制文件的api
- 设计模式-单一职责原著
- Java P5713 【深基3.例5】洛谷团队系统 洛谷入门题
- android 判断是否是标点符号_如何“专业”的定义Android的string资源中标点符号及特殊字符...
- 12306 验证码识别源码
- Ouroboros Snake POJ - 1392(数位哈密顿回路)
- 合成全身火焰燃烧人物海报图片的PS教程
- XILINX GTX学习笔记