二分查找法

来源:互联网 发布:矩阵a 4 1 2 编辑:程序博客网 时间:2024/04/29 06:00
package algorithm;/* * 二分法的关键思想是   假设该数组的长度是N那么二分后是N/2,再二分后是N/4……直到二分到1结束(当然这是属于最坏的情况了,即每次找到的那个中点数都不是我们要找的),那么二分的次数就是基本语句执行的次数,于是我们可以设次数为x,N*(1/2)^x=1;则x=logn,底数是2 */public class Dichotomy {public static void main(String[] args) {Dichotomy d = new Dichotomy();d.findValueByMiddle(new int[] { 1, 3, 2, 4, 8, 5, 6 }, 2);}/* * 二分查找 *  * @param a[] 数据集 ;s 待查找数据 */public int findValueByMiddle(int a[], int s) {int ben = 0, end = a.length;// 1.排序a[]--从小到大a = sort(a);// 2.查找return findMid(a, ben, end, s);}// 对数组排序public int[] sort(int a[]) {// 冒泡排序int min, temp, len = a.length;for (int j = 0; j < len; j++) {min = j;for (int i = j + 1; i < len; i++) {if (a[min] > a[i]) {temp = a[min];a[min] = a[i];a[i] = temp;}}}return a;}public int findMid(int a[], int ben, int end, int s) {int mid, res = 0;if (ben < 0 || ben > end) {System.out.println("出错!!!");return 0;} else {mid = (ben + end) / 2;if (a[mid] < s) {ben = mid;findMid(a, ben, end, s);} else if (a[mid] > s) {end = mid;findMid(a, ben, end, s);} else {System.out.println("找到s,位置:" + mid);res = mid;}}return res;}}


0 0