折半插入排序的核心思想是:
在一个顺序排列的有序序列中,用中间的元素和要查找的元素进行比较,如果相等则查找成功,如果失败,当要查找的元素大于中间元素时递归查找中间元素前一半的序列,否则递归查找中间元素后一半的序列,知道找到要查找的元素为止或者查找失败!
本程序中需要设置low,middle,和high三个指针,当low>high时查找失败!
#include<iostream>
using namespace std;
int main()
{
int a[20],i;
for(i=1;i<=10;i++)
cin>>a[i];
void InsertSort(int a[]);
InsertSort(a);
for(i=1;i<=10;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
void InsertSort(int a[])
{
int i,j,low,high,middle;
for(i=2;i<=10;i++)
{
a[0]=a[i];
low=1,high=i-1;
while(low<=high)
{
middle=(low+high)/2;
if(a[0]<a[middle])
high=middle-1;
else
low=middle+1;
}
for(j=i-1;j>=high+1;j--)
a[j+1]=a[j];
a[high+1]=a[0];
}
}
















