排序之插入排序(二分法)
文章目录
- 1 基本思想
- 2 图示
- 3 代码
- 4 测试结果
- 5 时间复杂度
1 基本思想
二分法插入排序和上一篇的插入排序本质上没有区别,都是从无序序列中取出数据和有序序列进行对比,放到合适的位置。
区别在于:
1.1上篇的插入排序是逐个和有序序列进行对比
1.2因为有序序列是一个有序序列(废话),所以可以结合二分查找的方法,找到正确的位置,将元素插入。
关于二分查找,这里就不再详细描述了。
2 图示
略
3 代码
#include <stdio.h>
#include <string.h>//type为0时为排序从小到大
int Insert2(int array[], int len, int type)
{int i = 0;int j = 0;int value = 0;int start = 0;int end = 0;int mid = 0;for (i = 1; i < len; i++){ value = array[i];start = 0;end = i - 1;while (start <= end){mid = (start + end) / 2;if (type == 0 ? (array[mid] > value) : (array[mid] < value)){end = mid - 1;} else{start = mid + 1;}}//此时的start = end + 1的位置即为value的真正位置for (j = i ; j >= start; j--){array[j] = array[j-1];}array[start] = value;}return 0;
}int main()
{int array[] = {9,6,5,3,1,13,2,8,7,4,5,28,5,8,6,3};int i = 0;int t = sizeof(array)/sizeof(int);Insert2(array, t, 1); printf("array is:");for (i = 0; i < t; i++){printf("%d ", array[i]);}printf("\n");return 0;
}
4 测试结果
#./test
array is:28 13 9 8 8 7 6 6 5 5 5 4 3 3 2 1
5 时间复杂度
二分插入排序和插入排序的复杂度一致,也是O(n^2)
二分插入排序是稳定的
排序之插入排序(二分法)相关推荐
- 排序算法之 二分法排序
之所以单独来二分法排序,是因为近些天一直在做二分法查找的问题,延伸只二分法排序,做此记录,以便于以后记忆. 首先了解下二分法的思想:对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y= ...
- 用c语言编写插入排序算法,C语言实现常用排序算法——插入排序
插入排序是最基础的排序算法,原理: 首先1个元素肯定是有序的,所以插入排序从第二个元素开始遍历: 内循环首先请求一个空间保存待插入元素,从当前元素向数组起始位置反向遍历: 当发现有大于待插入元素的元素 ...
- 三种基本排序的实现及其效率对比:冒泡排序、选择排序和插入排序
1 public class ThreeTypesOfBaseSort { 2 // ========================== 三种基本排序的效率对比 ================== ...
- 基础排序算法(冒泡排序,选择排序,插入排序)
最近经常调用api中的排序算法,很少自己写了,有时候也只写写快速排序这些比较快的排序,然而刚开始学排序时用的一些基本的排序算法却有点忘了 正好今天Java老师让我们每个人写个选择排序热热手,趁这个机会 ...
- 排序---初级排序算法(选择排序、插入排序和希尔排序)
写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera Algorithms Part1&2 本文 ...
- 算法与数据结构(冒泡排序,选择排序和插入排序的总结)
冒泡排序,选择排序和插入排序的总结 在规模较小时,或者元素的有序性较高时,插入排序的时间复杂度可以接近 O(n) ,是上述三种排序里表现最好的 一.通过表格我们可以发现,冒泡排序的时间复杂度是要优于选 ...
- 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
一.快速排序的基本思想 设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为: ①分解: 在R[low..high]中任选一个记录作为基准(Pivot ...
- iOS程序员也要学点算法吧 简单排序之插入排序
进入到简单排序的第三个排序,插入排序.其实插入排序,和冒泡,还有选择排序都是比较排序算法的一种,比较效率基本也是O(N²) 但是插入排序,效率基本比冒泡快一倍,选择快一点. 有一个已经有序的数据序列, ...
- C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)
参考:C语言五大排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)动态演示 作者:一只青木呀 发布时间: 2020-09-09 20:18:43 网址:https://blog.csdn.net/ ...
- 图解选择排序与插入排序
上一篇详述了冒泡排序及其优化,有兴趣的可以看看: 如何优化冒泡排序? 一.选择排序(SelectionSort) 算法思想:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩 ...
最新文章
- 几种常用编程语言的编程思想和方法 转
- C语言中自动变量栈的分配
- python list 取重复次数
- 【Hibernate】Hibernate的jar包的用途
- 更改微信小程序的基础版本库;更改uni-app小程序基础库;更改用户的微信小程序基础库最低版本;设置用户的微信小程序版本库;
- Java实现ActiveMQ之主题的生产者和消费者(二)
- image 微信小程序flex_微信小程序进阶-flex布局
- 把项目通过maven生产源码包和文档包并发布到自己的私服上
- vB编程VB源码 VB读取EXCEL工作薄某个表中数据 ADODB.Recordset
- 星星之火-56:前传接口 CPRI容器的字长、能力与CPRI速率的对应关系
- 路飞学城mysql练习
- elementUI_drawer踩坑_抽屉关闭问题
- Linunx报Resource temporarily unavailable解决办法
- MIX2 适配看这一篇就够了,18:9 只需一行代码
- 苹果邮件App漏洞?不要慌
- 分步骤详细解说:H5性能优化方案
- 百家号自媒体的文章在哪个时间段发文效果比较好?
- (纪中)2417. Loan Repayment【数学】
- win10开机启动文件夹路径
- 这就是你日日夜夜想要的docker!!!---------三分钟带你玩转docker命令
热门文章
- 复制百度文库文字最简单的方法
- 520 miix 小兵 黑苹果_黑苹果资源
- 自动驾驶OS市场的现状及未来
- G120变频器如何通过BOP-2操作面板或Startdrive复位出厂参数?
- 焊接工时简便计算工具_2020年新版机械加工工时费用计算(17页)-原创力文档...
- 公务员可以做哪些合法正规的兼职
- 实用网站推荐——office模板(PPT)
- 理发店收银系统php,理发店收银系统优缺点
- windows10镜像下载
- Eclipse启动时总是提示“subversive connector discovery”解决方案