赞
踩
二分查找是一种算法,其输入是一个有序的元素列表,而且列表必须是有序的。算法原理就是每次获取列表中间元素进行比较,每次排除一半的元素。
比如100个元素使用二分查找是:
100—50—25—13—7—4—2—1 只需要查找7次
而使用简单查找时候:
1–2–3–4……96–97–98–99-100 需要查找100次
注:算法都是按照最差情况计算
看看二分法的java代码:
/**
* @param list 查找集合
* @param item 查找目标
* @return 是否查找成功,-1为未查到;其他值为查找成功列表位置
*/
public static int isInclude(Integer[] list, int item) {
int low = 0;
int high = list.length - 1;
int time = 0;
while (low <= high) {
time = time+1;
System.out.print("次数="+time);
//整数类型默认取下整
//中间位置 = (左边界+右边界)/2
int mid = (low + high) / 2;
int guess = list[mid];
if(guess == item){
//找到元素
return mid;
}
if(guess > item){
//数字比目标大了
high = mid - 1;
}else {
low = mid + 1;
}
}
return -1;
}
算法规则:二分法查找会每次排除一半的元素,直到找到最后一个。比如:8–>4–>2–>1需要查找3次,16–>8–>4–>2–>1需要查找4次,依次类推发现,二分法查找的n个元素的列表,最多需要log2n步(n相对于2的对数,不为整数采用进一法),而简单查找最多需要n步。
算法时间:大O表示法,指算法在最糟糕的情况下所需要的步数
O(log2n):二分法查找 对数时间
O(n):简单查找 线性时间
O(n * log2 n):快速排序
O(n ^2 ): 选择排序
O(n!):旅行商问题 阶乘时间
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。