折半插入
来源:互联网 发布:域名服务器名词解释 编辑:程序博客网 时间:2024/06/03 16:42
设待排序的关键字序列为{12,2,16,30,28,10,16,20,6,18},用折半插入对其进行排序。
折半插入排序和折半查找类似,对当前表定义一个high,low,mid分别记录数据位置。high是高位置,low是
地位置,mid是当前的中间位置,每次比较都是拿当前数与中间位置的数比较。如果大于中间数就让low=mid+1
否则high=mid-1。找到要插入的位置之后,把后面的元素依次后移一位,再把元素插到当前的位置就行了
#include <iostream>
using namespace std;
typedef struct{
int key;
char otherinfo;
}Elemtype;
typedef struct SqNode{
Elemtype *data;
int length;
}SqList;
void InitList(SqList *S){ //初始化
S->data=new Elemtype[maxsize+1];
S->length=10;
S->data[1].key=12;
S->data[2].key=2;
S->data[3].key=16;
S->data[4].key=30;
S->data[5].key=28;
S->data[6].key=10;
S->data[7].key=16;
S->data[8].key=20;
S->data[9].key=6;
S->data[10].key=18;
}
void BInsertSort(SqList *S){ //折半插入
int i,j,low,high,mid;
for(i=2;i<=S->length;++i){
S->data[0].key=S->data[i].key;
low=1,high=i-1;
while(low<=high){
mid=(low+high)/2;
if(S->data[0].key<S->data[mid].key) high=mid-1;
else low=mid+1;
}
for(j=i-1;j>=high+1;j--) S->data[j+1].key=S->data[j].key;
S->data[high+1].key=S->data[0].key;
}
}
int main()
{
SqList S;
int dt[]={5,3,1};
BInsertSort(&S);
PrintList(&S);
return 0;
}
- 折半插入
- 折半插入
- 插入排序--折半插入
- 插入排序--折半插入
- 折半插入与折半查找
- 折半插入排序
- 折半插入排序
- 折半插入排序算法
- 折半插入排序算法
- 排序:折半插入排序
- 折半插入排序 练习
- 折半插入排序
- 折半插入排序
- 折半插入排序
- 折半插入排序 Java
- 折半插入排序算法
- 折半插入排序
- 折半插入排序
- 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。
- 集合源码分析----ArrayList
- C#命名规范
- 并查集-hdu1232
- 利用minAreaRect计算平面矩形的旋转角度
- 折半插入
- FlycoRoundView 自定义TextView
- where子句的简单实用
- Android应用开发SharedPreferences存储数据的使用方法
- android dataBinding详解
- Html基础总结笔记整理
- JavaScript复习memo
- 资源站点
- spring定时任务schedule未执行或超时的几点验证