import java.util.Random;
import java.util.Scanner;
public class BinaryFind {
//生成隨機數 然後排序 再二分查找 用作理解二分查找
public static void main(String[] args) {
Random r=new Random();
System.out.print("輸入一個數:");
Scanner s=new Scanner(System.in);
int len=s.nextInt();
int[] num=new int[len];
//生成隨機數 個數爲len
for(int i=0;i<num.length;i++){
num[i]=r.nextInt(999);
}
System.out.print("\n排序前:");
for(int i=0;i<num.length;i++){
System.out.print(num[i]+" ");
}
int findNum=num[0];
quckSort(num,0,len-1);
System.out.print("\n排序後:");
for(int i=0;i<num.length;i++){
System.out.print(num[i]+" ");
}
// BinarySearch(num,0,len-1,findNum);//肯定有的
System.out.println("\n找到下標爲:"+BinarySearch2(num,findNum));
}
//快排
public static void quckSort(int[] arr,int left,int right){
if(left<right){
int l=left,r=right,pivot=arr[l];
while(l<r){
while(l<r&&arr[r]>pivot)r--;
if(l<r)
arr[l++]=arr[r];
while(l<r&&arr[l]<pivot)l++;
if(l<r)
arr[r--]=arr[l];
}
arr[l]=pivot;
quckSort(arr,left,l-1);
quckSort(arr,l+1,right);
}
}
//二分查找 遞歸 有點麻煩
public static void BinarySearch(int[] arr,int left,int right,int findVal){
int middleIndex=(left+right)/2;
if(left<right){
if(findVal>arr[middleIndex]){
left=middleIndex+1;
}else if(findVal<arr[middleIndex]){
right=middleIndex-1;
}else if(findVal==arr[middleIndex]){
System.out.println("\n找到了,索引是:"+middleIndex);
return;
}
BinarySearch(arr,left,right,findVal);
}else{
System.out.println("\n not found");
}
}
//二分查找 比較容易理解
public static int BinarySearch2(int[] arr,int findVal){
int left=0;
int right=arr.length;
while(left<=right){
int middleIndex=(left+right)/2;
if(findVal==arr[middleIndex])
return middleIndex;
if(findVal>arr[middleIndex])
left=middleIndex+1;
else
right=middleIndex-1;
}
return -1;
}
}
java學習-二分查找
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.