void BinaryInsertionSort(int a[],int left,int right);//对数组a[left]到a[right]段数据从小到大排序
void BinaryInsertionSort(int a[],int left,int right)
{int low,middle,high;int temp;int i,j;//待排元素left+1 ---> right 共right - left个,a[left]默认有序for (i=left+1;i<=right;i++){    temp = a[i];low = left;        high = i - 1;    //i-1为已排好序列的右边界while(low<=high){middle = (low + high) / 2;if (a[i]<a[middle])    //应当将a[i]插入左半区high = middle - 1;else                //应当将a[i]插入右半区low = middle + 1;}//插入位置为low,low位置及其后的元素后移一位(i-1为已排好序列的右边界)for (j=i-1;j>=low;j--)a[j+1] = a[j];a[low] = temp;}
}/*算法分析:time-complexity: 折半插入排序在查找插入位置时花费的时间很少,但移动次数与直接插入排序次数一样,最差情况下时间复杂度为O(n2),最好情况下为O(nlog2n);平均情况下为O(n2);space-complexity: O(1);算法不稳定.
*/

转载于:https://www.cnblogs.com/daemon94011/p/8870096.html

折半插入排序C/C++相关推荐

  1. java 折半插入排序_[Java代码] Java实现直接插入排序和折半插入排序算法示例

    1 排序思想: 将待排序的记录Ri插入到已经排好序的记录R1,R2,--,R(N-1)中. 对于一个随机序列而言,就是从第二个元素开始,依次将这个元素插入到它之前的元素中的相应位置.它之前的元素已经排 ...

  2. 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序...

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  3. 折半插入排序稳定吗_C++实现经典算法--折半插入排序

    本节用c++实现经典的折半插入排序,也是王道上总结得插入排序的第二种算法,思路很清晰,首先将用户输入保存在数组中,然后从数组第二个元素开始遍历整个序列,每次将元素跟其左边邻居元素比较,如果出现小于其邻 ...

  4. 简单插入排序,折半插入排序和2路插入排序 c源码

    以下三种插入排序时间复杂度均为O(n^2) 简单插入排序,简单直接.假定数组有序,插入 i, 从后往前遍历找到适合位置 j,移动 j +1 ~ i -1往后一位,插入i到j中. void insert ...

  5. 三种插入排序算法:直接插入排序、折半插入排序、希尔插入排序

    一.直接插入排序 空间复杂度:O(1) 时间复杂度:O(n^2) 稳定性:稳定 适用性:顺序表和链表 //直接插入排序 void InsertSort1(int A[],int n){int i,j, ...

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

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

  7. C语言实现折半插入排序(Binary Insertion Sort)算法(附完整源码)

    折半插入排序Binary Insertion Sort 折半插入排序(Binary Insertion Sort)算法的完整源码(定义,实现,main函数测试) 折半插入排序(Binary Inser ...

  8. C++实现折半插入排序

    在"C++实现直接插入排序 "中,由于插入排序的基本操作是在一个有序表中进行查找和插入,则这个"查找"操作可以利用"折半查找"来实现,由此进 ...

  9. 直接插入排序,折半插入排序,希尔排序,简单选择排序,冒泡排序,快速排序模板以及比较次数与移动次数的分析,折半搜索算法模板

    #include<stdio.h> #include<time.h> #include <stdlib.h>const int maxx=1e2+1; int a[ ...

  10. 二分查找和折半插入排序一块说说-很合适~~~

    前言 上一篇在聊时间复杂度和空间复杂度时,没有按指定格式显示(明明预览的时候没问题的),强迫症的我稍微优化了一下重新发布,目的就是让小伙伴看着舒服. 上次聊到的直接插入排序在比较有序数据和待插入数据时 ...

最新文章

  1. 人脸识别(三)——源码放送。opencv人脸识别
  2. 牛客 - 货物种类(差分)
  3. 《数据库SQL实战》查找当前薪水详情以及部门编号dept_no
  4. mac地址和ip地址的区别(转)
  5. Ubuntu上安装Robomongo及添加到启动器
  6. 基于python的销售系统_python实现超市商品销售管理系统
  7. NeatUpload的安装使用 文件上传。可传大文件。
  8. “开房信息泄露案”开审,“B/S架构”酒店管理系统终成酒店大患
  9. html5移动端海报制作,H5制作利器,教你分分钟制作高/大/上H5海报!
  10. swper实现分页器样式修改
  11. CUDA安装出现图形驱动程序安装失败
  12. 国产化系统改造实践(未完)
  13. Allegro中显示两种单位方法
  14. 计算机卡死快捷键,必看!电脑运行卡或软件卡死无响应,怎么办?
  15. 华擎主板安装linux系统,J3455 篇一:华擎J3455主板安装Ubuntu server
  16. easyui datagrid th标签列数字保留2位小数
  17. html 图片 空白,HTML图片标签空白解决方法
  18. 关于MOS管栅极和栅介质(氧化物)的材料选择
  19. 5号字对应的数字字号_请问在WORD文档里,字体大小所对应的用数字表示是多少...
  20. NAXX Demo2_WYQ_01

热门文章

  1. mysql5.7.11无法启动_MySQL5.7.11免安装版的安装和配置:解决MYSQL 服务无法启动问题...
  2. capture RGBD data with opencv4.1.1 from XTION2 on windows 10
  3. CGAL1_1 Three Points and One Segment
  4. linux wget安装mysql_linux安装mysql
  5. e7用什么主板_主板当中的纽扣电池有什么用?电池没电了会怎样?
  6. linux怎么查看服务器主频,Linux环境下查看服务器硬件信息
  7. el-table固定列之后没有出现滚动条_一道经典的MySQL面试题,答案出现三次反转...
  8. 目标检测综述——两阶段检测器
  9. 如何筛选特征?用随机森林(RF)
  10. 图像风格转换 - keras简化版实现