折半插入排序算法(C语言代码实现)
2年前 (2024-04-27)
上一节介绍了直接插入排序算法的理论实现和具体的代码实现,如果你善于思考就会发现该算法在查找插入位置时,采用的是顺序查找的方式,而在查找表中数据本身有序的前提下,可以使用折半查找来代替顺序查找,这种排序的算法就是折半插入排序算法。
折半插入排序算法相比较于直接插入排序算法,只是减少了关键字间的比较次数,而记录的移动次数没有进行优化,所以该算法的时间复杂度仍是
该算法的具体代码实现为:
#include <stdio.h>
void print(int a[], int n ,int i){
printf("%d:",i);
for(int j=0; j<n; j++){
printf("%d",a[j]);
}
printf("\n");
}
void BInsertSort(int a[],int size){
int i,j,low = 0,high = 0,mid;
int temp = 0;
for (i=1; i<size; i++) {
low=0;
high=i-1;
temp=a[i];
//采用折半查找法判断插入位置,最终变量 low 表示插入位置
while (low<=high) {
mid=(low+high)/2;
if (a[mid]>temp) {
high=mid-1;
}else{
low=mid+1;
}
}
//有序表中插入位置后的元素统一后移
for (j=i; j>low; j--) {
a[j]=a[j-1];
}
a[low]=temp;//插入元素
print(a, 8, i);
}
}
int main(){
int a[8] = {3,1,7,5,2,4,9,6};
BInsertSort(a, 8);
return 0;
}
运行结果为:
1:13752496
2:13752496
3:13572496
4:12357496
5:12345796
6:12345796
2:13752496
3:13572496
4:12357496
5:12345796
6:12345796
7:12345679
折半插入排序算法相比较于直接插入排序算法,只是减少了关键字间的比较次数,而记录的移动次数没有进行优化,所以该算法的时间复杂度仍是
O(n2)。- 随机文章
- 北京 马尔代夫 航班(北京直飞马尔代夫,开启度假之旅)
- 中国 马尔代夫 军港(中马加强军事合作,马尔代夫建设中国军港)
- 刚好去了马尔代夫(一个完美的度假胜地——马尔代夫之旅)
- 南宁的小马尔代夫(南宁拥有一处像小马尔代夫的度假胜地)
- 马尔代夫黑山分夫(黑山分夫:马尔代夫最美的季节之一)
- 山西襄垣马尔代夫(山西襄垣官员马尔代夫度假,受到质疑)
- 曲阜马尔代夫酒店(曲阜造访马尔代夫:体验一段奢华之旅)
- 凯悦 马尔代夫(凯悦品牌酒店巨头进军马尔代夫)
- 亚航 马尔代夫(亚洲航空公司开通马尔代夫航线)
- 小孩玩乐马尔代夫(孩子们在马尔代夫享受乐趣的视频实录)
- 中国 马尔代夫 球场(中国马尔代夫合作建设多功能球场)
- 南昌马尔代夫原型(南昌市两江新区打造“中国马尔代夫”)
- 天津 马尔代夫(天津有直飞马尔代夫的航班开通)
- 咸阳马尔代夫月季(咸阳市私家花园成功种植马尔代夫月季)
- 徒步到达马尔代夫(徒步探索马尔代夫:步行穿越美丽海岛)
- 龙安 马尔代夫(龙安攻略:马尔代夫美景一网打尽)
- 烟台马尔代夫评价(烟台拥有自己的马尔代夫——大隐私岛)
- 阿杜 马尔代夫(阿杜在马尔代夫哪里度假了?)
- 萍乡马尔代夫游玩(萍乡旅游达人推荐:畅享马尔代夫美景)
- 离开马尔代夫感言(留恋马尔代夫:离开这片天堂时的感觉)
- 胶州马尔代夫改造(胶州湾打造仿佛在马尔代夫的度假胜地)
- 许昌马尔代夫天气(许昌迎来像马尔代夫一样的阳光与海浪)
- 马尔代夫下水游泳(马尔代夫浮潜:与海豚同游的惊喜之旅)
- 北京 马尔代夫(北京将于近期复航前往马尔代夫的首批包机航班)
- 跨越马尔代夫群岛(穿越马尔代夫岛屿,探秘美丽海洋世界)
- 柯南 马尔代夫(柯南重返海底世界,揭开马尔代夫神秘探案)
- 陪你去看马尔代夫(带你探秘马尔代夫,尽享美丽沙滩之旅)
- 木桥 马尔代夫(马尔代夫的木制栈道:美丽景色背后的秘密)
- 高清 马尔代夫(高清探秘:美不胜收的马尔代夫岛屿风光)
- 马尔代夫中国寺庙(马尔代夫开设中国寺庙,传承佛教文化)
