怎样用二分法从数组里查找一个数的位置?

用键盘输入一组有序数列,将这些数放在数组里。然后用户在输入一个数,用二分法从数组里查找这个数的位置,如果没有程序正常退出。... 用键盘输入一组有序数列,将这些数放在数组里。然后用户在输入一个数,用二分法从数组里查找这个数的位置,如果没有程序正常退出。 展开
 我来答
匿名用户
推荐于2017-11-26
展开全部
以下是一个例子,你可以参考一下:
bool find(int*,int,int);
void main()
{
int x;
int a[10] = {1,2,3,4,5,6,7,8,9,10};
printf("请输入要查找的数字:");
scanf("%d",&x);
if(find(a,10,x))
printf("找到了%d.",x);
else
printf("没有找到%d.",x);
}

bool find(int * a,int len,int x)
{
if(len == 1 && *a != x)
return false;
if(a[len/2] == x)
return true;
else if(a[len/2] < x)
return find(a+len/2,len-len/2,x);
else
return find(a,len/2,x);
}
匿名用户
2013-11-15
展开全部
自己运行下就 OK了
/**
* 折半查找算法实现查找
*/

public class Test5 {
int k;
int binarySearch(int ary[],int key){
int len=ary.length,mid = 0,low,high,find;
low = 0; high = len - 1;find = 0;
/*置区间初值*/
k = 0;
while (low <= high){
mid = (low + high) / 2;
k ++; /*求中点*/
if (key == ary[mid]){

find = 1; break;
}
/*已查到*/
else if(key > ary[mid] ) low = mid + 1; /*在后半区间查找*/
else high = mid - 1; /*在前半区间查找*/
}
/*查找成功,返回找到元素的位置,查找不成功,返回-1标记*/
return find==1 ? mid: -1;
}

public static void main(String[] aa) {

int[] a={7,23,90,9,25,16,32,54,214,432};

for(int i=0; i<a.length; i++) {
int min = i;
for(int j=i+1; j<a.length; j++){

if(a[min] > a[j]) {
min = j;
}
}

if(min != i) {
int tem = a[min];
a[min] = a[i];
a[i] = tem;
}
}

Test5 t = new Test5();

if(t.binarySearch(a,214) == -1) {
System.out.println("没找到!");
} else {
System.out.println("查找214的下标为:" + t.binarySearch(a,214));
System.out.println("查找214的下标为:" + t.binarySearch(a,214) + "次数为" + t.k + "次");
}

}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式