1. 程式人生 > >使用或不使用遞歸的二分查找

使用或不使用遞歸的二分查找

strong 控制 main pri 使用遞歸 else i++ urn find

不使用遞歸的二分查找




public class Main {

public static void main(String[] args) {
int[] array = {9, 5, 2, 6, 1, 3, 8, 4, 10, 7};
int j;

for (int i=1;i<array.length;i++){
int number=array[i];
j=i;
while (j>0&&number<array[j-1]){
array[j]=array[j-1];
j--;
}
array[j]=number;
}

findTwoPoint(array,5);

}

public static int findTwoPoint(int[] array,int key) {
int start=0;
int last=array.length-1;
int number=(last-start)/2+start;
while (start<=last){
if (key==array[number]){
System.out.println(number);
return key;
}else if (key<array[number]){
number=last-1;
}else if (number>array[number]){
number=start+1;
}
}
return -1;

}

}

控制臺輸出:4


使用遞歸的二分查找

 遞歸,就是在運行的過程中調用自己。


  遞歸必須要有三個要素:


  ①、邊界條件


  ②、遞歸前進段


  ③、遞歸返回段


  當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。

 
public class Main {

public static void main(String[] args) {
int[] array = {9, 5, 2, 6, 1, 3, 8, 4, 10, 7};
int j;

for (int i=1;i<array.length;i++){
int number=array[i];
j=i;
while (j>0&&number<array[j-1]){
array[j]=array[j-1];
j--;
}
array[j]=number;
}

findTwoPoint(array,5,10,0);

}

public static int findTwoPoint(int[] array,int key,int high,int low) {
int number=(high-low)/2+low;

if (key==array[number]){
System.out.println(number);
return key;
}else if (low>high){
return -1;
}else {
if (number>array[number]){
return findTwoPoint(array,key,high,low+1);
}
if (number<array[number]){
return findTwoPoint(array,key,high-1,low);
}
}

return -1;

}

控制臺輸出:4   


遞歸的二分查找和非遞歸的二分查找效率都為O(logN),遞歸的二分查找更加簡潔,便於理解,但是速度會比非遞歸的慢。


 

使用或不使用遞歸的二分查找