折半插入排序的核心思想是:

在一个顺序排列的有序序列中,用中间的元素和要查找的元素进行比较,如果相等则查找成功,如果失败,当要查找的元素大于中间元素时递归查找中间元素前一半的序列,否则递归查找中间元素后一半的序列,知道找到要查找的元素为止或者查找失败!

本程序中需要设置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];
    }
}