二分查找法:
import java.util.Scanner;
/**
* 二分法查找:
* 1、二分法查找建立在"排序"的基础上。
* 2、原理:
* 10(下标0) 23 56 89 100 111 222 235 500 600(下标9) arr数组
* 目标:找出600的下标
* 开始下标为0
* (0+9) / 2 == 4(中间元素下标) 自动取整
* arr[4] = 100 这个元素是中间元素
* 100 < 600 中间元素比查找元素小说明被查找的元素在中间元素的右边(若比查找元素大,则需中间元素-1再加上开始下标除2)
* 那么接下来开始的下标变为4+1
* (5+9) / 2 = 7(中间元素下标)
* arr[7] = 235
* .....
* ..... 重复以上步骤找出600
*/
//基础语法实现代码
public class ArrayUtil {
public static void main(String[] args) {
int[] arr = {10,23,56,89,100,111,222,235,500,600};
System.out.print("请输入查找目标:");
int shuru = new Scanner(System.in).nextInt();
int mi = search(arr,shuru);
System.out.println(mi == -1?"该元素不存在":"元素下标为:"+mi);
}
public static int search(int[] arra, int dest){ //dest为目标元素
int begin = 0; //开始下标
int end = arra.length-1; //结束下标
int mid = (begin + end) / 2; //中间元素
while(begin <= end){
if(arra[mid] == dest){
return mid;
}else if(begin < dest){
begin = mid + 1;
}else{
end = mid -1;
}
}
return -1; //这里-1可自由定义,主要用于输出结果的判断
}
}
Arrays工具类:
import java.util.Arrays;
import java.util.Scanner;
/**
* Arrays工具类:
* idea中双击shift在d出窗口classes中输入Arrays即可进入Arrays工具类API帮助文档中查看包含方法。
* Arrays工具类部分方法如下
*/
public class ArraysTest {
public static void main(String[] args) {
int[] arr = {1,4,22,11,2,6,3,10};
//排序
Arrays.sort(arr); //可直接调用Arrays.sort();进行排序
//遍历输出
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
//二分法查找
System.out.println("输入查找元素:");
int input = new Scanner(System.in).nextInt();
int index = Arrays.binarySearch(arr,input); //可直接调用Arrays.binarySearch();进行查找
System.out.println(index == -1?"该元素不存在":"该元素下标为:" +index );
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)