文章目录

  • 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)
二分插入排序是稳定的

排序之插入排序(二分法)相关推荐

  1. 排序算法之 二分法排序

    之所以单独来二分法排序,是因为近些天一直在做二分法查找的问题,延伸只二分法排序,做此记录,以便于以后记忆. 首先了解下二分法的思想:对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y= ...

  2. 用c语言编写插入排序算法,C语言实现常用排序算法——插入排序

    插入排序是最基础的排序算法,原理: 首先1个元素肯定是有序的,所以插入排序从第二个元素开始遍历: 内循环首先请求一个空间保存待插入元素,从当前元素向数组起始位置反向遍历: 当发现有大于待插入元素的元素 ...

  3. 三种基本排序的实现及其效率对比:冒泡排序、选择排序和插入排序

    1 public class ThreeTypesOfBaseSort { 2 // ========================== 三种基本排序的效率对比 ================== ...

  4. 基础排序算法(冒泡排序,选择排序,插入排序)

    最近经常调用api中的排序算法,很少自己写了,有时候也只写写快速排序这些比较快的排序,然而刚开始学排序时用的一些基本的排序算法却有点忘了 正好今天Java老师让我们每个人写个选择排序热热手,趁这个机会 ...

  5. 排序---初级排序算法(选择排序、插入排序和希尔排序)

    写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera  Algorithms Part1&2 本文 ...

  6. 算法与数据结构(冒泡排序,选择排序和插入排序的总结)

    冒泡排序,选择排序和插入排序的总结 在规模较小时,或者元素的有序性较高时,插入排序的时间复杂度可以接近 O(n) ,是上述三种排序里表现最好的 一.通过表格我们可以发现,冒泡排序的时间复杂度是要优于选 ...

  7. 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结

    一.快速排序的基本思想     设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为: ①分解:     在R[low..high]中任选一个记录作为基准(Pivot ...

  8. iOS程序员也要学点算法吧 简单排序之插入排序

    进入到简单排序的第三个排序,插入排序.其实插入排序,和冒泡,还有选择排序都是比较排序算法的一种,比较效率基本也是O(N²) 但是插入排序,效率基本比冒泡快一倍,选择快一点. 有一个已经有序的数据序列, ...

  9. C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)

    参考:C语言五大排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)动态演示 作者:一只青木呀 发布时间: 2020-09-09 20:18:43 网址:https://blog.csdn.net/ ...

  10. 图解选择排序与插入排序

    上一篇详述了冒泡排序及其优化,有兴趣的可以看看: 如何优化冒泡排序? 一.选择排序(SelectionSort) 算法思想:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩 ...

最新文章

  1. 几种常用编程语言的编程思想和方法 转
  2. C语言中自动变量栈的分配
  3. python list 取重复次数
  4. 【Hibernate】Hibernate的jar包的用途
  5. 更改微信小程序的基础版本库;更改uni-app小程序基础库;更改用户的微信小程序基础库最低版本;设置用户的微信小程序版本库;
  6. Java实现ActiveMQ之主题的生产者和消费者(二)
  7. image 微信小程序flex_微信小程序进阶-flex布局
  8. 把项目通过maven生产源码包和文档包并发布到自己的私服上
  9. vB编程VB源码 VB读取EXCEL工作薄某个表中数据 ADODB.Recordset
  10. 星星之火-56:前传接口 CPRI容器的字长、能力与CPRI速率的对应关系
  11. 路飞学城mysql练习
  12. elementUI_drawer踩坑_抽屉关闭问题
  13. Linunx报Resource temporarily unavailable解决办法
  14. MIX2 适配看这一篇就够了,18:9 只需一行代码
  15. 苹果邮件App漏洞?不要慌
  16. 分步骤详细解说:H5性能优化方案
  17. 百家号自媒体的文章在哪个时间段发文效果比较好?
  18. (纪中)2417. Loan Repayment【数学】
  19. win10开机启动文件夹路径
  20. 这就是你日日夜夜想要的docker!!!---------三分钟带你玩转docker命令

热门文章

  1. 复制百度文库文字最简单的方法
  2. 520 miix 小兵 黑苹果_黑苹果资源
  3. 自动驾驶OS市场的现状及未来
  4. G120变频器如何通过BOP-2操作面板或Startdrive复位出厂参数?
  5. 焊接工时简便计算工具_2020年新版机械加工工时费用计算(17页)-原创力文档...
  6. 公务员可以做哪些合法正规的兼职
  7. 实用网站推荐——office模板(PPT)
  8. 理发店收银系统php,理发店收银系统优缺点
  9. windows10镜像下载
  10. Eclipse启动时总是提示“subversive connector discovery”解决方案