//二分查找 升序数组------前面正确的就不重复了,直接用升序数组
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
int left=0, right=0, mid, times = 0, k, x=0,n=11;
printf_s("\n\n请输入需要查找的数:\n");
scanf_s("%d", &x);
right = n - 1;
for (k = 0; k<n; k++)
{
mid = (left + right) / 2;
times++;
printf_s("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_s("所找的数是第%d个,为%d", mid + 1, a[mid]);//0~9排序a[0]是第1个数;下标与个数差1
break;
}
}
if (times == n)
printf_s("未找到");
二分法查找升序一维数组,结果不对
先学的数组,没学函数,论坛上带函数的二分法不大看得懂,不用函数进行查找结果总是不对,请帮忙指正错误,感谢
//二分法查找
#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;
}
- 点赞
- 写回答
- 关注问题
- 收藏
- 复制链接分享
- 邀请回答
2条回答
为你推荐
- 二分法查找升序一维数组,结果不对
- c语言
- 2个回答