二分查找错误在哪
package Demo1024;
class calculate{
}
public class math1 {
public static void main(String[]args){
int[]arr={1,2,3,4,5,6,7};
doubleBanarySort(arr,4);
}
public static void doubleBanarySort(int []arr, int x){
int a=0;//数组首位
int b=arr.length-1;//数组的末尾
int mid=(a+b)/2;//数组中值
while(a<b){
if(x==mid){
System.out.println("找到了"+x);
break;
}
else if(x<mid){
b=mid;
}else if(x>mid){
a=mid;
}
}
System.out.println("不存在该元素");
}
}
正在回答
中间值应该是: int mid = (arr[a] + arr[b]) / 2; 祝学习愉快~
效果: 利用二分法找到所在的区间数字,并且累计这个数字在区间内共有几个。老师,以下的代码可否优化???
----------------------------------------------------------------华丽的分割线----------------------------------------
package com.suanfa.test;
/**
* 二分查找法
* @author Lenovo
*
*/
public class Demo7 {
public static void main(String[] args) {
//定义一个数组
int[] arr = {2,1,4,6,6};
doubleBanarySort(arr,6);
}
//二分法
public static void doubleBanarySort(int[] arr,int x){
int a=0;//数组首位
int b=arr.length-1;//数组的末尾
int mid;//数组中指
int count=0;//几个数字出现了几次
while(a<b){
//中位数字
mid =(a+b)/2;
//如果输入的>arr[中位]
if(x==arr[mid]){
System.out.println("找到了");
break;
}else if(x<arr[mid]){ //如果输入的小于中位
a=mid;
//如果在这区间的话那么循环排一次,区间里面的数字,看是否存在
for(int i=0;i<mid;i++){
if(x==arr[i]){
System.out.println("扎到了 "+arr[i]);
count++;
}
}
break;
}else if(x>arr[mid]){
for(int i=mid;i<arr.length;i++){
//如果在区间找到一样的数字
if(x==arr[i]){
System.out.println("扎到了 "+arr[i]);
count++;
}
}
break;
}
System.out.println("不存在该元素");
}
System.out.println("区间出现了几次一样的数字: "+count);
}
}
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星