折半查找插入
插入的经典:
#include<stdio.h>
#define N 1000
int main()
{
void bi_search(int a[],int n,int x);
int a[N],i,m,x;
printf("please input the length:");
scanf("%d",&m);
printf("please input a[0]:\n");
scanf("%d",&a[0]);
i=1;
while(i<m)
{
scanf("%d",&a[i]);
if(a[i]>=a[i-1])
i=i+1;
else printf("enter this number again:\n");
}
for(i=0;i<m;i++) printf("%d \n",a[i]);
printf("please input the num you want search:\n");
scanf("%d",&x);
bi_search(a,m,x);
return 0;
}
void bi_search(int a[],int n,int x)
{
int bot=0,top=n-1,mid,find=0,i,j,t1,t2;
do
{
mid=(top+bot)/2;
if(a[mid]==x)
find=1;
else if (a[mid]>x)
top=mid-1;
else
bot=mid+1;
}while(find==0&&bot<=top);
if(find==0)
{
printf("no search\n");
if(x>a[n-1])
{a[n]=x;
for(i=0;i<=n;i++)
printf("%d ",a[i]);}
else
{
for(i=0;i<n;i++)
{
if(a[i]>x)
{
t1=a[i];
a[i]=x;
for(j=i+1;j<n+1;j++)
{
t2=a[j];
a[j]=t1;
t1=t2;
}
for(i=0;i<n+1;i++)
printf("%d ",a[i]);
break;
}
}
}
}
else if(find==1)
printf("It is the %dst number\n",mid);
}