查找算法中顺序查找算是最简单的了,无论是有序的还是无序的都可以,也不需要排序,只需要一个个对比即可,但其实效率很低。我们来看下代码
1public static int search1(int[] a, int key) {
2 for (int i = 0, length = a.length; i 3 if (a[i] == key)
4 return i;
5 }
6 return -1;
7}
如果找到就返回查找的数所在数组中的下标,如果没找到就返回-1。还有说上面的代码可以优化,使用一个哨兵,免去了每次都要越界的判断,但通过实际测试运行效率并没有提高,无论测试的数据是多还是少运行的时间都差不多,我们来看下代码。
1public static int search2(int[] a, int key) {
2 int index = a.length - 1;
3 if (key == a[index])
4 return index;
5 a[index] = key;
6 int i = 0;
7 while (a[i++] != key) ;
8 return i == index + 1 ? -1 : i - 1;
9}
顺序查找是最简单的一种查找算法,对数据的要求也很随意,不需要排序即可查找。后面会介绍二分法查找,插值查找和斐波那契查找都是基于已经排序过的数据。