问题:

对待排序的数组r[1..n]中的元素进行直接插入排序,得到一个有序的(从小到大)的数组r[1..n]。

算法思想:

1、设待排序的记录存放在数组r[1..n]中,r[1]是一个有序序列。

2、循环n-1次,每次使用折半查找法,查找r[i](i=2,..,n)在已排好的序列r[1..i-1]中的插入位置,然后将r[i]插入表长为i-1的序列r[1..i-1],直到将r[n]插入表长为n-1的有序序列r[1..n-1],最后得到一个表长为n的有序序列。

图解:

代码:

#include<iostream>
using namespace std;
#define MAXSIZE 20//顺序表的最大长度
typedef int KeyType;//定义关键字类型为整型
typedef int InfoType;
typedef struct
{KeyType key;//关键字项InfoType otherinfo;//其他数据项
}RedType;
typedef struct
{RedType r[MAXSIZE+1];//r[0]闲置或做哨兵单元int length;//顺序表的长度
}SqList;//顺序表类型void BInsertSort(SqList &L)//对顺序表L做折半插入排序
{int low,high,m;for(int i=2;i<=L.length;i++){L.r[0]=L.r[i];//将待插入的记录暂存到监视哨中low=1;high=i-1;//置查找区间初值while(low<=high)//在r[low..high]中折半查找插入的位置{m=(low+high)/2;if(L.r[0].key<L.r[m].key)high=m-1;//插入点在前一子表elselow=m+1;//插入点在后一子表}//whilefor(int j=i-1;j>=high+1;--j)L.r[j+1]=L.r[j];//L.r[high+1]=L.r[0];}
}int main()
{SqList L;for(int i=1;i<=10;i++)L.r[i].key=11-i;L.length=10;for(int i=1;i<=L.length;i++)cout<<L.r[i].key<<" ";cout<<endl;BInsertSort(L);for(int i=1;i<=L.length;i++)cout<<L.r[i].key<<" ";cout<<endl;return 0;
}

运行结果:

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

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

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

  2. 数据结构之希尔排序图文详解及代码(C++实现)

    问题: 对待排序的数组r[1..n]中的元素进行直接插入排序,得到一个有序的(从小到大)的数组r[1..n]. 算法思想: 1.第一趟取增量d1(d1<n)把全部记录分为d1个组,所有间隔为d1 ...

  3. 数据结构之堆栈排序图文详解及代码(C++实现)

    代码: #include<iostream> using namespace std; #define MAXSIZE 20//顺序表的最大长度 typedef int KeyType;/ ...

  4. android代码查找快捷键是什么,Android Studio搜索功能(查找功能)及快捷键图文详解(示例代码)...

    1.在当前窗口查找文本[Ctrl+F] F3 向下查找关键字出现位置 Shift+F3 向上一个关键字出现位置 2.在当前工程内查找文本[Ctrl+Shift+F] 先会弹出一个对话框,直接点击[fi ...

  5. c++数据结构中 顺序队列的队首队尾_数据结构与算法—队列图文详解

    前言 栈和队列是一对好兄弟,前面我们介绍过数据结构与算法-栈详解,那么栈的机制相对简单,后入先出,就像进入一个狭小的山洞,山洞只有一个出口,只能后进先出(在外面的先出去).而队列就好比是一个隧道,后面 ...

  6. 经典排序算法(4)——折半插入排序算法详解

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

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

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

  8. 数据结构之归并排序图文详解及代码(C++实现)

    代码: #include<iostream> using namespace std; #define MAXSIZE 20//顺序表的最大长度 typedef int KeyType;/ ...

  9. 数据结构与算法之选择排序图文详解及代码 (C++实现)

    实现: #include<iostream> using namespace std; #define MAXSIZE 20//顺序表的最大长度 typedef int KeyType;/ ...

最新文章

  1. 图片管理之保存图片数据
  2. mybatis使用find_in_set导致cpu占用过高
  3. Android系统架构基本模式解析
  4. Hadoop的那些事儿
  5. 和python哪个容易胖_为什么有些人特别容易胖?
  6. 七种武器——.NET工程师求职面试必杀技(转)
  7. 从最小样本中识别鸟类
  8. 命令行构建Unity项目
  9. WPS简历模板的图标怎么修改_160套个人求职简历模板精美套装,修改内容直接套用...
  10. [Unity算法]斜抛运动(变种)
  11. java入门循序渐进
  12. 数学规划模型(三):整数规划模型
  13. Oracle的学习心得和知识总结(七)|Oracle数据库Literals技术详解
  14. Ubuntu 安装uwsgi出错
  15. 智能微型机器人可随周围环境“变身”
  16. 万测试验机软件,万测关注检查井盖质量检测
  17. 基于神经网络的预测控制,神经网络预测系统应用
  18. 工程伦理--4.1 解决伦理困境的一般步骤
  19. 打不出电话显示无法连接到服务器,打电话显示无法连接到服务器
  20. php42天日历,php实现的日历程序

热门文章

  1. 美国大学生数学建模竞赛赛题特点
  2. Java中的关键字——final
  3. buu [BJDCTF 2nd]灵能精通-y1ng
  4. 【Flask】sqlalchemy高级用法(注意join的用法)
  5. 4.11-固件映像包 (FIP)
  6. optee中spinlock的实现原理详解
  7. OpenGL 坐标系统(Perspective)
  8. SocketAPI,CAsyncSocket,CSocket内幕及其用法
  9. JAVA_IO流四大家族(1)
  10. 重游java(猜拳项目)