//你那程序太難改了,每個(gè)方法都單職責(zé)啊
創(chuàng)新互聯(lián)是一家專(zhuān)業(yè)提供洪山企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都做網(wǎng)站、網(wǎng)站制作、H5頁(yè)面制作、小程序制作等業(yè)務(wù)。10年已為洪山眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)的建站公司優(yōu)惠進(jìn)行中。
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));
}
}
二分查找是一種在有序數(shù)組中查找指定元素的算法,它的基本思想是:每次將查找區(qū)間縮小一半,直到找到目標(biāo)元素或者確定目標(biāo)元素不存在為止。
下面是兩種寫(xiě)法:
遞歸版本
def binary_search(array, target, low, high):
if low high:
return -1
mid = (low + high) // 2
if array[mid] == target:
return mid
elif array[mid] target:
return binary_search(array, target, low, mid-1)
else:
return binary_search(array, target, mid+1, high)
# 調(diào)用方法
index = binary_search(array, target, 0, len(array)-1)
循環(huán)版本
def binary_search(array, target):
low, high = 0, len(array) - 1
while low = high:
mid = (low + high) // 2
if array[mid] == target:
return mid
elif array[mid] target:
high = mid - 1
else:
low = mid + 1
return -1
# 調(diào)用方法
index = binary_search(array, target)
在這里,array 是待查找的有序數(shù)組,target 是要查找的元素,low 和 high 分別表示查找區(qū)間的左右端點(diǎn)。如果找到了目標(biāo)元素,函數(shù)會(huì)返回其在數(shù)組中的下標(biāo);如果沒(méi)有找到,函數(shù)會(huì)返回 -1。
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("在數(shù)組中未查找到數(shù)23");
else
System.out.println("數(shù)字23是數(shù)組中第 " + (point + 1) + " 位數(shù)");
}
/**
* 二分法查找一個(gè)整數(shù)在整型數(shù)組中的位置
*
* 算法思路:首先得到數(shù)組a的最小值和最大值的下標(biāo),分別是:low和high,接著求出值位于數(shù)組中間那個(gè)數(shù)的下標(biāo)middle
* 然后再將這個(gè)middle對(duì)應(yīng)的數(shù)組中的數(shù)和待查找的數(shù)num進(jìn)行比較,如果相等,則表示已查找到,如果num a[middle]
* 則說(shuō)明num位于a[low]和a[middle]之間,于是將a[middle - 1]設(shè)為較大值,繼續(xù)求出此時(shí)對(duì)應(yīng)的a[middle],
* 再進(jìn)行比較,其他情況可依次類(lèi)推。一直到low=high,如果此時(shí)還沒(méi)有在數(shù)組a中查找到,則說(shuō)明該數(shù)組a中沒(méi)有值num,返回-1
*
* @param a 給定的整型數(shù)組
* @param num 待查找的數(shù) num
*
* @return 返回整數(shù)num在數(shù)組a中的位置下標(biāo),如果未查找到則返回-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;
}
}
程序基本上就是這樣了,其中注釋中有詳細(xì)的解釋說(shuō)明