折半插入排序(Binary Insertion Sort)是一种插入排序算法,通过不断地将数据元素插入到合适的位置进行排序,在寻找插入点时采用了折半查找。

一、算法基本思想

(1)基本思想

折半插入排序的基本思想是:顺序地把待排序的序列中的各个元素按其关键字的大小,通过折半查找插入到已排序的序列的适当位置。

(2)运行过程

直接插入排序的运作如下:

1、将待排序序列的第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

2、从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置,在查找元素的适当位置时,采用了折半查找方法。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

(3)示例

二、算法实现(核心代码)

C++实现:

void binary_insertion_sort(int arr[], int len)
{int i, j, temp, m, low, high;for (i = 1; i < len; i++){temp = arr[i];low = 0; high = i-1;while (low <= high){m = (low +high) / 2;if(arr[m] > temp)high = m-1;elselow = m+1;}}for (j = i-1; j>=high+1; j--)arr[j+1] = arr[j];arr[j+1] = temp;
}

Java实现:

public void binary_insertion_sort(int arr[])
{int i, j, temp, m, low, high, len = arr.length;for (i = 1; i < len; i++){temp = arr[i];low = 0; high = i-1;while (low <= high){m = (low +high) / 2;if(arr[m] > temp)high = m-1;elselow = m+1;}}for (j = i-1; j>=high+1; j--)arr[j+1] = arr[j];arr[j+1] = temp;
}

三、性能(算法时间、空间复杂度、稳定性)分析

折半查找只是减少了比较次数,但是元素的移动次数不变。折半插入排序平均时间复杂度为O(n^2);空间复杂度为O(1);是稳定的排序算法。

经典排序算法(4)——折半插入排序算法详解相关推荐

  1. 数据结构之折半插入排序图文详解及代码(C++实现)

    问题: 对待排序的数组r[1..n]中的元素进行直接插入排序,得到一个有序的(从小到大)的数组r[1..n]. 算法思想: 1.设待排序的记录存放在数组r[1..n]中,r[1]是一个有序序列. 2. ...

  2. 折半插入排序算法详解之C语言版

    一.算法原理 折半插入排序是插入排序方法中一种,相比较与直接插入排序算法,减少了排序过程中比较次数,也是一种常用的排序算法. 折半插入排序算法基本原理是将折半查找方法与直接插入排序方法相结合,也就是在 ...

  3. 数据结构之插入排序:折半插入排序算法

    排序算法:折半插入排序算法 思维导图: 折半插入排序算法的定义: 折半插入排序算法的原理: 折半插入排序算法的代码实现: 折半插入排序算法的性能: 思维导图: 折半插入排序算法的定义: 插入排序时查找 ...

  4. 【数据结构----笔记4】插入排序算法之【折半插入排序算法】

    /*__________________________________________________________________________________________________ ...

  5. 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法

    注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...

  6. matlab中gad,10大经典算法matlab代码以及代码详解【数学建模、信号处理】

    [实例简介] 10大算法程序以及详细解释,包括模拟退火,禁忌搜索,遗传算法,神经网络.搜索算法. 图论. 遗传退火法.组合算法.免疫算法. 蒙特卡洛.灰色预测.动态规划等常用经典算法.是数学建模.信号 ...

  7. 分治算法小结(附例题详解)

    分治算法小结(附例题详解) 我的理解: 分治算法我的理解就是看人下菜碟,我们要解决的问题就好像一群人构成的集体,要我们解决这个问题,那我们就要满足这群人里面每个人不同的需求,也就是写出解决的代码,把每 ...

  8. c语言将AOE网络的数据写入TXT文档中,数据结构与算法学习辅导及习题详解.张乃孝版-C/C++文档类资源...

    数据结构与算法学习辅导及习题详解.张乃孝版.04年10月 经过几年的努力,我深深体会到,编写这种辅导书要比编写一本湝通教材困难得多. 但愿我的上述理想,在本书中能够得以体现. 本书的组织 本书继承了& ...

  9. python模拟手写笔迹_Python实现基于KNN算法的笔迹识别功能详解

    本文实例讲述了Python实现基于KNN算法的笔迹识别功能.分享给大家供大家参考,具体如下: 需要用到: Numpy库 Pandas库 手写识别数据 点击此处本站下载. 数据说明: 数据共有785列, ...

  10. 基于密度的聚类算法(3)——DPC详解

    基于密度的聚类算法(1)--DBSCAN详解 基于密度的聚类算法(2)--OPTICS详解 基于密度的聚类算法(3)--DPC详解 1. DPC简介 2014年,一种新的基于密度的聚类算法被提出,且其 ...

最新文章

  1. Class.getResources()和classLoader.getResources()区别
  2. 数据结构之优先队列--二叉堆(Java实现)
  3. 启明云端分享| 2.4寸磁编码旋钮方案智能屏
  4. 制作MACOSX10.10.3/10.9安装启动盘U盘的教程
  5. oracle udev 多路径,Suse 11下多路径及udev配置
  6. 郑捷《机器学习算法原理与编程实践》学习笔记(第四章 推荐系统原理)(三)SVD...
  7. python基础教程百度云-python从入门到精通视频百度云盘下载
  8. 文件上传------c#
  9. WGAN-GP方法介绍
  10. java实现万年历——超简单!
  11. 【Java 8 新特性】Java LocalDate 详解
  12. stata进行无交互效应模型选择—混合模型,个体效应固定,时间效应固定,双向固定和随机效应
  13. Element 入门教程
  14. Base64转MultipartFile
  15. Numpy:两小时速成
  16. “adb”不是内部或外部命令,也不是可运行的程序或批处理文件
  17. crc16,crc32校验
  18. case class 和 class的区别
  19. 【解决方案】智慧幼教:TSINGSEE青犀视频如何助力幼儿园智能化建设?
  20. 计算机硬件检测使用的工具是什么,电脑硬件检测工具hwinfo32使用教程

热门文章

  1. 栈和队列之生成窗口最大值数组
  2. 我使用 html 反向输出自己打自己(7)
  3. 情人节,我表白了CSDN小姐姐后,竟然...【为表白写了一个绘图工具,让我不再手残】
  4. php 怎么定义一个空对象,php定义空对象的方法
  5. python商用_python实现sm2和sm4国密(国家商用密码)算法的示例
  6. 三年租男友回家竟花了10万......
  7. 如何用大数据找到男/女朋友?
  8. 信心满满的去面算法工程师,竟然凉了...
  9. mysql添加字段时定义候选键_MySQL 表约束
  10. python求斜边上的高_直角三角形斜边上的高怎么求