先学的数组,没学函数,论坛上带函数的二分法不大看得懂,不用函数进行查找结果总是不对,请帮忙指正错误,感谢
//二分法查找
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{
int n,i,box,j;
printf("请输入数组长度:");
scanf("%d",&n);
int a[n];
srand(time(NULL));
for(i=0;i<n;i++)
a[i]=rand()%90+10;
printf("数组如下:\n");
for(i=0;i<n;i++)
{
printf("%-3d",a[i]);
}//赋值并打印数组
printf("\n\n排序后如下:\n");
for(i=0;i<=n;i++)//冒泡排序
{
for(j=0;j<=n-i-2;j++)
{
if(a[j]>a[j+1])
{
box=a[j];
a[j]=a[j+1];
a[j+1]=box;
}
}
}
for(i=0;i<n;i++)
{
printf("%-3d",a[i]);
}//打印排序后数组
//二分查找 升序数组
int left,right,mid,times=0,k,x;
left=0,right=n-1;
printf("\n\n请输入需要查找的数:\n");
scanf("%d",x);
for(k=0;k<n;k++)
{
mid=(left+right)/2;
times++;
printf("mid=%d times=%d\n",mid,times);
if(x>a[mid])
left=mid+1;
else if(x<a[mid])
right=mid-1;
else if(x==a[mid])
{printf("所找的数是第%d个,为%d",mid+1,a[mid]);//0~9排序a[0]是第1个数;下标与个数差1
break;}
}
if(times==n)
printf("未找到");
return 0;
}