查找算法——二分查找
步骤
先排序,再折半查找
java代码实现
非递归实现二分查找
public static void main(String[] args) {
int[] a = {4,8,1,2,10,5,7,9,3,6};
System.out.println(Arrays.toString(a));
//如果找到的话,返回查找到的位序
//如果没有找到,返回-(插入点位序)-1
System.out.println("请输入需要查找的元素:");
Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();
scanner.close();
System.out.println(binarySearch(a,x));
}
private static int binarySearch(int[] a,int x) {
//先从小到大排序
Arrays.sort(a);
System.out.println(Arrays.toString(a));
int l = 0;
int r = a.length-1;
while(r-l>=0) {
int m = (l+r)>>>1;
if(a[m]==x) {
return (l+r)/2;
}
else if(a[m]<x){
l = m + 1;
}
else {
r = m - 1;
}
}
return -1;
}
递归实现二分查找
public static void main(String[] args) {
int[] a = { 4, 8, 1, 2, 10, 5, 7, 9, 3, 6 };
System.out.println(Arrays.toString(a));
// 如果找到的话,返回查找到的位序
// 如果没有找到,返回-(插入点位序)-1
Arrays.sort(a);
System.out.println(Arrays.toString(a));
System.out.println("请输入需要查找的元素:");
Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();
scanner.close();
System.out.println(binarySearch(a, x, 0, a.length - 1));
}
// 递归实现
private static int binarySearch(int[] a, int x, int l, int r) {
if (l == r)
if (x == a[l])
return l;
else
return -1;
else {
int m = (l + r) >>> 1;
if (x == a[m])
return m;
else if (x > a[m])
return binarySearch(a, x, m + 1, r);
else
return binarySearch(a, x, l, m - 1);
}
}