输入:先输入进行二分搜索元素的个数,然后按大小依次输入(或随机生成,然后排序)每个数字,最后输入要求搜索的元素。
输出:要求搜索元素的下标(下标从0开始!)。
示例:输入:61 5 5 9 6 9 6,输出3
package Test3;
import java.util.Scanner;
public class Dechotomy {
static int binsearch(int arr[],int left,int right,int key){ //二分查找的思想,定中间元素,大于arr[mid]的在右端,小于mid的在左端(用key比),递归调用
int mid=(left+right)/2;
if (left<=right) { //通过不断地递归,如果要查询的元素在数组中并不存在,会有left>right、返回-1
if(key==arr[mid]) return mid;
if(key<arr[mid]) return binsearch(arr,left,mid-1,key);
if(key>arr[mid]) return binsearch(arr,mid+1,right,key);
}
return -1;
}
/* while (left <= right) { //非递归
int mid = (left + right) / 2;
if (key == arr[mid]) return mid;
if (key > arr[mid]) left = mid + 1;
if (key < arr[mid]) right = mid - 1;
}
return -1;
}*/
private static void swap(int arr[],int i,int j) {
int temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
static void bubblesort(int arr[]){ //冒泡
for (int i = 1; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if(arr[j]>arr[i]) swap(arr,i,j);
}
}
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n=s.nextInt();
int arr[]=new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i]=s.nextInt();
}
bubblesort(arr); //写了排序不引用怎么会对?
int key =s.nextInt();
System.out.println(binsearch(arr,0,arr.length-1,key));
}
}