常见算法(二分查找)
版权声明
- 本文原创作者:清风不渡
- 博客地址:https://blog.csdn.net/WXKKang
二分查找
二分查找是一种快速检索数据的算法。它不会对数据执行排序等操作。注意:对数组执行二分查找要求首先对数组按照升序排序,否则查找结果是错误的。
(1)编程实现思路
二分查找法实际上就是每次都查中间的那个数。当前数比中间的数小,那么就在前半部分数据中查找;如果比比当前数大,就在后半部分数据中查找。按这个规律依次查找,直到找到最后一个是中间数。在这个过程中有匹配则表示查找到,binarySearch返回位置的下标值;如果没匹配则返回-1,代码如下:
package cn.com;
public class Demo {
public static void main(String[] args) {
int[] array = { 1, 4, 3, 6, 8 };
int search = Demo.search(array, 8);
if (search == -1) {
System.out.println("抱歉,数组中没有这个数");
}else {
System.out.println("该数的索引值为:"+search);
}
}
public static int search(int[] array,int k) {
int max = array.length-1;
int min = 0;
int mid = (max+min)/2;
while (array[mid]!=k) {
if (min<=max) {
if (array[mid]>k) {
max = mid - 1;
}else if(array[mid]<k){
min = mid + 1;
}
mid = (max+min)/2;
}else {
mid = -1;
break;
}
}
return mid;
}
}
(2)binarySearch()
我们知道,要进行二分查找首先这个数组必须是有序的,所以我们可以根据Arrays工具类中的方法先将数组排序再进行二分查找,代码如下:
package cn.com;
import java.util.Arrays;
public class Demo {
public static void main(String[] args) {
int[] array = { 1, 4, 3, 6, 8 };
//将数组排序,默认为升序
Arrays.sort(array);
//进行二分查找
int binarySearch = Arrays.binarySearch(array, 8);
//处理返回值
if (binarySearch<0) {
System.out.println("抱歉,数组中没有这个数");
}else{
System.out.println("数组中该数的索引值为:"+binarySearch);
}
}
}