import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; import java.util.Random; public class BinarySearch { /* * 二分搜索的输入为非降序的数组,要查找的数,n为数组的长度 */ public static int binarySearch(int []a,int x,int n){ /* * 其基本思想是从中间开始找,比它小从左边的中间开始找,比它大从右边的中间开始找 * 其查找速度是所有算法中最快的(除了哈希之外),但它对数组的要求比较高 * 其最坏的时间复杂度为logn */ int left=0;int right=n-1; while(left<=right){ int middle=(left+right)/2; if(a[middle]==x) return middle;//如果中间的数相等的话,直接返回 if(x>a[middle]) left=middle+1;//找右边 else right=middle-1;//找左边 } return -1;//数组的长度为0时直接返回-1; } /** * 二分查找普通实现。 * @param arr 有序数组 * @param key 查找元素 * @return 不存在返回-1 */ public static int binSearch(int arr[], int key) { int low = 0; int high = arr.length - 1; while (low <= high) { int mid = (low+high)/2; if(key==arr[mid]) { return mid; } else if(key<arr[mid]) { high=mid-1; } else {low=mid+1;} } return -1; } public static void main(String[] args) { int[] array = {1,2,3,4,5,6,7,8,9}; long startTime = System.currentTimeMillis();//获取当前时间 //int result =binarySearch(array,6, array.length);//执行二分查找 int result=binSearch(array,8); long endTime = System.currentTimeMillis();//获取程序结束后的时间 System.out.println(result);//输出x所在的下标位置 /* * 程序运行时间是指进行进行纯二分查找的时间,不包括输入输出的时间 */ System.out.println("程序运行时间:"+(endTime-startTime)+"ms"); } }
二分查找java实例
最新推荐文章于 2024-04-30 08:49:33 发布