二分法
/*二分插入法*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a[11]={1,2,3,5,6,7,8,9,10,11};
int low=1;
int high=11;
int mid;
int temp;
int s=4; /*待插入的数字*/
printf("the old:\n");
for(temp=0; temp<10; ++temp)
printf("%d ",a[temp]);
printf("\nthe new:\n");
while(low<=high)
{
mid=(low+high)/2 ;
if ((a[mid]>=s && a[mid-1]=<s) || (a[mid]=<s && a[mid+1]>=s)) /*此语句是关键,数字前驱和后继的比较*/
{
break;
}
else
if(a[mid]<s)
{
low=mid-1 ;
}
else
{
high=mid-1 ;
}
}
for(temp=10; temp>=mid; temp--) /*数字后移*/
a[temp+1]=a[temp];
a[mid]=s;
for(temp=0; temp<11; temp++)
printf("%d ",a[temp]);
system("pause");
return 0;
}
程序写得可能不是很好,大家帮忙指导指导