文章目录
———————————————————————————————————————
顺序查找(被查找的序列可以无序)
线性查找又称顺序查找,是一种最简单的查找方法,它的基本思想是从第一个记录开始,逐个比较记录的关键字,直到和给定的K值相等,则查找成功;若比较结果与文件中n个记录的关键字都不等,则查找失败。
由于顺序查找是从头插到尾,所以这种方法的查询时间慢。
代码实现
public class SeqSearch {
public static void main(String[] args) {
int arr[] = {
1, 9, 11, -1, 34, 899, 899, 899 };// 没有顺序的数组
List<Integer> list = seqSearch(arr, 899);//查找899
System.out.println(list);
}
public static List<Integer> seqSearch(int[] arr, int value) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < arr.length; i++) {
//遍历数组
if (value == arr[i]) {
//如果找到就放进集合中,继续往下找。
list.add(i);
}
}
return list;
}
}
查找 899 返回结果下标5、6、7查找成功。
———————————————————————————————————————
二分查找(被查找的序列需有序)
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
查找思路
代码实现
我以{1,2,3,4,5,6,6,6}这个数组作为被查询序列,下面代码使用情景为序列从小到大排序。
public static List<Integer> binarySearch(int arr[], int left, int right, int findVal) {
int mid = (left + right) / 2;
int midVal = arr[mid];
if (left > right) {
//left > right代表序列没有要找的元素
return new ArrayList<Integer>();
}
if (findVal > midVal) {
// 查找元素大于中间值,向右递归
return binarySearch2(arr, mid + 1, right, findVal);
}
if (findVal <