本文主要详细介绍用C语言实现半插入排序。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
本文分享C实现半插入排序的具体代码,供大家参考。具体内容如下
一、思路:
与插入排序相比,比较次数减少,但插入时间仍然相同。
(1)根据二分搜索法方法,找出V[i]在V[0],V[1]…V[i-1]中插入的位置;
(2)前后移动插入位置的元素。
二、实现程序:
//二进制插入:与插入排序相比,比较次数减少,但插入时间不变。
//时间复杂度仍然是:O(n*n)
#包括iostream
使用命名空间std
const int maxSize=20
模板类T
void BinInsertSort(T arr[],const int left,const int right) {
int i,j,low,high,mid
测试温度;
for(i=左1;i=对;i ) {
temp=arr[I];//临时arr[i]
低=左;
高=I-1;//低,高为二分搜索法的上下界。
While(low=high) {//用半搜索的方法找到arr[i]的插入位置。
mid=(低高)/2;
if(临时数组[中间])
高=中-1;
其他
低=中1;
} //当
for(j=I-1;j=低;j -)
arr[j 1]=arr[j];//按顺序向后移动
arr[low]=temp;//回填
} //for
} //BinInsertSort
int main(int argc,const char * argv[]) {
int i,n,arr[maxSize];
Cout '请输入要排序的数字个数:';
CIN n;
Cout '请输入要排序的数字:';
for(I=0;I n;我)
CIN arr[I];
排序前的“cout”:“endl;
for(I=0;I n;我)
cout arr[I]' ';
cout endl
BinInsertSort(arr,0,n-1);
排序后的cout:' endl;
for(I=0;I n;我)
cout arr[I]' ';
cout endl
返回0;
}
测试结果:
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。