黑马程序员技术交流社区
标题:
如何让折半查找出多个重复数
[打印本页]
作者:
Wqi
时间:
2015-7-19 20:17
标题:
如何让折半查找出多个重复数
本帖最后由 Wqi 于 2015-7-19 20:18 编辑
<div class="blockcode"><blockquote>//折半查找,数组必须有序。
public static void zBCZ(int[] arr,int key)
{
selectSort(arr);//先排序,有序后在查找。
int num = 0;
int min = 0;
int max = arr.length-1;
int mid = 0;
while(min <= max)
{
mid = (min+max)/2;
if(arr[mid] == key)
{
num = mid +1;
System.out.println(key+"位于数组中从小到大排序后的第"+num+"号位置!");
max = max -2;
continue;
}
else if(arr[mid] >key)
{
max = mid-1;
}
else
{
min = mid +1;
}
}
if(num == 0)
System.out.println("数组中没有"+key+"这个数!");
}
复制代码
5H_{FN0~]H60E484K(~L_KT.png
(5.58 KB, 下载次数: 14)
下载附件
2015-7-19 20:15 上传
重复提示
作者:
Wqi
时间:
2015-7-19 20:19
请问如何修改能去掉重复的提示。。
作者:
Wqi
时间:
2015-7-19 20:21
if(arr[mid] == key)
{
num = mid +1;
System.out.println(key+"位于数组中从小到大排序后的第"+num+"号位置!");
max = max -2;
continue;
}
这部分需要如何修改?求各位指导。。。
作者:
Wqi
时间:
2015-7-19 20:23
。。。。我想清楚了。。应该查找到后,再向左和向右分别查找重复,不能在折半了。。。
作者:
Wqi
时间:
2015-7-19 20:49
晕。还是无法判断向左向右各查找多少次,总不能遍历吧。。。求指导如何实现用折半查找出重复数。
渣渣搞不定啊,大神们快来。。。
作者:
为明天而奋斗
时间:
2015-7-19 21:16
利用折半查找找到第一个值后,min=mid-1,max=mid+1,然后再利用循环让要查找的key与前后进行比较
作者:
陈建民1
时间:
2015-7-19 21:31
找到第一个符合的mid后,再找前一个和后一个位置,以此类推。因为数组是排序后的,如果有多个存在,肯定是在mid的相邻位置。
作者:
Wqi
时间:
2015-7-19 21:47
谢谢以上各位。已经搞定了。
public static void zBCZ(int[] arr,int key)
{
int e = arr.length-1;
int s = 0;
search(arr,key,s,e);
}
private static void search(int[] arr,int key,int s,int e)
{
int count = 0;
if(s>e)
return;
int mid = (s+e)/2;
if(arr[mid]>key)
search(arr,key,s,mid-1);
else if(arr[mid]<key)
search(arr,key,mid+1,e);
else
{
search(arr,key,s,mid-1);
count = mid+1;
System.out.println(key+"的位置是"+count);
search(arr,key,mid+1,e);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2