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

实现如下:

#include<iostream>
using namespace std;#define SIZE_A 9int main(){void myshow(int*  p,int length);//函数提前声明int list[SIZE_A]={-1,49,38,65,97,76,13,27,49};cout<<"排序前:"<<endl;myshow(list,SIZE_A);//折半插入排序,位置【0】辅助空间,真正要排序的数据在位置【1】~【length-1】for(int i=2;i<sizeof(list)/sizeof(int);i++){list[0]=list[i];//将待插入数据暂存至位置【0】int low=1;int high=i-1;while(low<=high){//在【low】和【high】中折半查找有序插入的位置int middle=(low+high)/2;//折半if(list[0]<list[middle]){//插入位置在前半段high=middle-1;}else{//插入位置在后半段low=middle+1;}}//whilefor(int j=i-1;j>=high+1;j--){//记录后移list[j+1]=list[j];}list[high+1]=list[0];//插入}//forcout<<"排序后:"<<endl;myshow(list,SIZE_A);return 0;}
/*
description:
在标准输出设备上显示数组元素。
parameter:
int* p:指向整形数组首元素的指针
int length:整形数据长度
*/
void myshow(int*  p,int length){for(int i=0;i<length;i++){cout<<*(p+i)<<"\t";}cout<<endl;
}

运行结果为:

时间与空间复杂度分析

空间复杂度:

从上述实现可以看出,折半插入排序所需辅助空间和直接插入排序相同(都只需要一个辅助空间,即哨兵);

时间复杂度:

折半插入排序仅仅减少了关键字比较的次数,而记录的移动次数不变。因此,折半插入排序的时间复杂度仍为O(n*n)。

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

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

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

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

最新文章

  1. 38 JavaScript中的this指向问题
  2. 关于Django的时区设置TIME_ZONE,USE_TZ的问题
  3. Python为何能成为数据分析的主流工具?
  4. Flask设置、获取、删除cookies
  5. TIOBE 发布 8 月编程语言榜单:C# 排名如何?
  6. jsp页面c标签循环map , c:foreach 循环map
  7. 全流分析取证:高级威胁哪里跑?!
  8. android 基类fragment,Android DialogFragment 基类的定制
  9. java 规则引擎_【java规则引擎】java规则引擎搭建开发环境(示例代码)
  10. c语言怎么产生随机字母,菜鸟求助,写一个随机输出26个英文字母的程序
  11. SDUT-保留整数 -
  12. C#基础-Func,Action
  13. ANSYS mesh网格划分
  14. iOS开发:导入字体库
  15. Mock数据模板规范详解
  16. 介绍一个产品的思维导图_产品经理可以用思维导图做什么?
  17. android虚拟按键趋势,为什么Android虚拟按键老被吐槽但却有厂商坚持在做?
  18. 如何顺利通过c语言补考,大学里补考比考试难的学科,不想挂科最好认真学,尤其大一新生...
  19. 呼叫中心客服人员的秘密生活:同理心永远不会让你遭殃
  20. 手机端网页设计尺寸大小

热门文章

  1. scrollView的几个属性contentSize contentOffset contentInset
  2. 使用证书创建数据库镜像
  3. WinForm实现类似QQ停靠,显示隐藏过程添加特效效果
  4. 单个下拉框数据保持问题
  5. wpf Command Binding
  6. Windows Server 2008 R2安装Zune 4.0解决方法
  7. windows系统内实现端口转发
  8. 如何通过shell脚本操作MongoDB
  9. LVS入门篇(二)之LVS基础
  10. [Oracle11g] 通过伪列查询