1. 程式人生 > 其它 >Java二分搜尋以及Arrays類中的binarySearch()方法的使用

Java二分搜尋以及Arrays類中的binarySearch()方法的使用

/*------有序的陣列,二分搜尋一個數,如果存在,返回其索引,否則返回 -1------*/
int nums[]=new int[]{1,2,3,4,5,6,7,8};
Scanner sc=new Scanner(System.in);
int target=sc.nextInt();
int left = 0;
int right = nums.length - 1;
int ans=-1;
while(left <= right)
{
int mid = (left+right)/2;
if(nums[mid] == target)
{
ans = mid;
break;
}
else if(nums[mid] < target)
{
left = mid+1;
}
else if(nums[mid] > target)
{
right = mid-1;
}
}
System.out.println(ans);


/*----------Arrays類的binarySearch()方法,可使用二分搜尋法來搜尋指定陣列,以獲得指定物件---------*/
//1. Arrays.binarySearch(Object[]a,Object key) a:要搜尋的陣列; key:要搜尋的值
//如果key包含在陣列內,返回索引值;否則返回-1或者“-”插入點。
//如果陣列內的值都比目標值大或者在陣列範圍內的,返回 -(第一個小於/大於目標值的元素的下標+1)
//如果陣列內的值都比目標值小,則是返回-(陣列長度+1)
//如果陣列包含多個具有指定值的元素,則無法保證將找到哪一個元素
int[] nums=new int[]{3,4,10,8,9,6};
Arrays.sort(nums);//將陣列進行排序
int index=Arrays.binarySearch(nums, 5);
System.out.println(index);//輸出索引

//2.binarySearch(object[]a, int fromIndex, int endIndex, object key)
//a:要搜尋的陣列; key:要搜尋的值;fromIndex指定範圍內索引開始搜尋處(包含);endIndex:指定範圍內索引搜尋結束處(不包含);
//當如果區內的值都比目標值小,則是返回-(toindex+1),如果區間內的值都比目標值大,則返回-(fromindex+1)
//如果key值在區間內,-(返回第一個大於目標值的原陣列元素的下標+1)
int[] nums=new int[]{3,4,10,8,9,6};
Arrays.sort(nums);
int index=Arrays.binarySearch(nums,1, 3,5);
System.out.println(index);