public class Erfenfa {
/*
* 思想:对于一个升序的数组,在数组中找一个一个数索引,取出这个数组中间的数a与b之比较
* 如果a>b,则往左边找
* 如果a<b,则往右边找
* 以此类推
*
* 注意点:
* 确保每一个数都有机会被选中 假如 :只有两个数{1,2}寻找2
* 如果外层条件为left<right先找到1,接着外层条件就不成立了,2就没有被比较的机会了,
* 所以while的条件应该为(left<=right))
*/
public static void main(String[] args) {
int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int left = 0;//注意是索引 不是a[0]
int right = a.length - 1;
int middle;
int num = (int) (Math.random() * 10);
System.out.println(num);
while (left <= right) {
middle = (left + right) / 2;
if (a[middle] == num) {
System.out.println("索引为:" + middle);
break;
} else if (a[middle] > num) {
right = middle - 1;
} else {
left = middle + 1;
}
}
}
}
简单算法之二分法
最新推荐文章于 2020-11-22 10:58:47 发布