定义
二分查找又称折半查找,它的基本思想是将n个元素分成大致相等的两部分,x为要查找的元素。取a[n/2]与x做比较,如果x = a[n/2],则找到x,算法中止;如果x < a[n/2],则只要在数组a的左半部分继续搜索x,如果x > a[n/2],则只要在数组a的右半部搜索x。
要求
1.必须采用顺序存储结构。
2.必须按关键字大小有序排列。
优点
1.比较次数少。
2.查找速度快。
3.平均性能好。
缺点
1.要求苛刻。
2.插入删除困难。
适用范围
不经常变动而查找频繁的有序列表。
实现
1.常规查找
// 二分查找
public <T extends Comparable<T>> void bubbleSort(T[] list) {
boolean flag = true;
for(int i = 1; i < list.length && flag; i++) {
flag = false;
for(int j = 1; j < list.length - i; j++) {
if(list[j].compareTo(list[j + 1]) > 0) {
T temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
flag = true;
}
}
}
}
2.使用比较器查找
// 使用比较器的二分查找
public <T> void bubbleSort(T[] list, Comparator<T> comparator) {
boolean flag = true;
for(int i = 1; i < list.length && flag; i++) {
flag = false;
for(int j = 1; j < list.length - i; j++) {
if(comparator.compare(list[j], list[j + 1]) > 0) {
T temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
flag = true;
}
}
}
}