包含二分查找java代码6的词条

求一个简单的一维数组二分查找程序代码Java

public class Test6 { //二分查找 public static int findPos(int[] a,int key) { int start=0; int end=a.length-1; int temp=0; while(startend){ int mid=(start+end)/2; if(keya[mid]){ start=mid+1; temp=start; }else if(keya[mid]){ end=mid-1; temp=end; }else { return mid; } } return temp; } public static void main(String[] args) { int[]array={1,4,6,7,10,11,23,78}; System.out.println(findPos(array, 0)); }}

10年积累的网站制作、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有特克斯免费网站建设让你可以放心的选择与我们合作。

用Java语言编写对整型数组进行二分查找的程序。

public class BinarySearchDemo {

public static void main(String[] args) {

int[] a = new int[]{1,5,7,9,11,18,23,48,69};

int point = new BinarySearchDemo().binarySearch(a, 23);

if(point == -1)

System.out.println("在数组中未查找到数23");

else

System.out.println("数字23是数组中第 " + (point + 1) + " 位数");

}

/**

* 二分法查找一个整数在整型数组中的位置

*

* 算法思路:首先得到数组a的最小值和最大值的下标,分别是:low和high,接着求出值位于数组中间那个数的下标middle

* 然后再将这个middle对应的数组中的数和待查找的数num进行比较,如果相等,则表示已查找到,如果num a[middle]

* 则说明num位于a[low]和a[middle]之间,于是将a[middle - 1]设为较大值,继续求出此时对应的a[middle],

* 再进行比较,其他情况可依次类推。一直到low=high,如果此时还没有在数组a中查找到,则说明该数组a中没有值num,返回-1

*

* @param a 给定的整型数组

* @param num 待查找的数 num

*

* @return 返回整数num在数组a中的位置下标,如果未查找到则返回-1

* */

public int binarySearch(int[] a,int num){

int low = 0;

int high = a.length - 1;

while(low = high){

int middle = (low + high) / 2;

if(num == a[middle])

return middle;

else if(num a[middle])

high = middle - 1;

else

low = middle + 1;

}

return -1;

}

}

程序基本上就是这样了,其中注释中有详细的解释说明

求一个java的二分查找的程序代码

//你那程序太难改了,每个方法都单职责啊

public class Test6 {

//二分查找

public static int findPos(int[] a,int key) {

int start=0;

int end=a.length-1;

int temp=0;

while(startend){

int mid=(start+end)/2;

if(keya[mid]){

start=mid+1;

temp=start;

}else if(keya[mid]){

end=mid-1;

temp=end;

}else {

return mid;

}

}

return temp;

}

public static void main(String[] args) {

int[]array={1,4,6,7,10,11,23,78};

System.out.println(findPos(array, 0));

}

}

java二分查找

我大概看了一下,找出了你2个重要的缺点.

第一,你用一个5个数的小数组挨个按你写的算法算一下,你会发现很多地方是a.length-1而非a.length,有的地方是==,而不是.

其中还有2个小地方.

if(counta.length/2) break;

可以写成while(reader.hasNextInt()counta.length/2).

3.else if(na[middle]) 可以写成 else.

第二,是最重要的问题.算法上面.

试想一下如果只有2个数.start是0,end是1,给出的数是a,用你的if(na[middle]) start=middle;0.5取0,永远start,middle都是0.如果你说因此你用a.length而不是减1,那a就永远也取不到。

怎么解决,加一个如果middle=(start+end)/2后等于start且不为0的话,start取end.


当前文章:包含二分查找java代码6的词条
当前URL:http://ybzwz.com/article/docpeso.html