#include<iostream>
#include"time.h"
using namespace std;
void Half_InsertSort(int s[],int len)
{
int temp,i,j,mid,high,low;
for(i=1;i<len;i++)
{
temp=s[i];
low=0;
high=i-1;
while(low<=high) //while循环用来找合适的插入位置
{
mid=(low+high)/2; //mid设置为已有有序序列的中间值
if(s[i]>s[mid]) //如果待插入值s[i]比有序序列中间的值大,则去有序表的右半边寻找
low=mid+1; //即把low右移到中间值的右边一位,之后重新进入while循环重设mid值
else high=mid-1;
}
for(j=i-1;j>=high+1;j--)
s[j+1]=s[j]; //统一移动元素,空出插入位置
s[j+1]=temp; //插入操作
cout<<"第"<<i<<"次直接插入排序的结果是: "; //打印结果
for(int k=0;k<len;k++)
cout<<s[k]<<" ";
cout<<endl;
}
}
int main()
{
int a[10]={6,3,14,12,4,5,1,31,53,62,};
Half_InsertSort(a,10);
cout<<endl;
cout<<"程序耗时: "<<clock()<<" ms"<<endl;
system("pause");
return 0;
}
折半插入排序
最新推荐文章于 2023-09-27 06:00:00 发布