- 产生20个3位正整数
- 使用插入法排序
- 再用二分查找找到输入的数x
- 输出其下标,找不到输出-1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a[20],i,j,x;
int key;
srand((unsigned)time(NULL));
for(i=0; i<20; i++)
{
a[i]=rand()%(999-100+1)+100;
}
for(i=1; i<20; i++)
{
key=a[i];
j=i-1;
while(a[j]>key&&j>=0)
{
a[j+1]=a[j];
j--;
}
a[j+1]=key;
}
for(i=0; i<20; i++)
{
printf("%d ",a[i]);
if((i+1)%5==0)
printf("\n");
}
printf("输入一个数:");
scanf("%d",&x);
int left=0;
int right=19;
int mid=0;
while(left<=right)
{ mid=(left+right)/2;
if(a[mid]>x) right=mid-1;
else if(a[mid]<x) left=mid+1;
else if(a[mid]==x)
{
printf("%d",mid);
break;
}
}
if(left>right) printf("-1");
return 0;
}