顺序查找
顺序查找:也就是按顺序一位一位的查找,找到要查找数的索引(下标)。
- 示例:
/**
* 顺序查找
*
* @param arr 查找的数组
* @param num 待查找的数
* @return -1:没有找到,>=0:下标
*/
public static int findIndex(int[] arr, int num) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == num) {
return i;
}
}
return -1;
}
- 优点:实现简单,容易理解;
- 弊端:数据量大的时候,计算机的负载也非常的大,效率低。
二分查找
二分查找,其实就是折半查找,每次搜索过滤掉一半的元素,直到找到该元素为止
- 示例
/**
* 二分查找(数组元素从小到大有序排列)
*
* @param arr 查找的数组
* @param num 待查找的数
* @return -1:没有找到,>=0:下标
*/
private static int find(int[] arr, int num) {
int start = 0;
int end = arr.length - 1;
if (num < arr[start] || num > arr[end]) {
return -1;
}
int mid;
while (start <= end) {
mid = (start + end) / 2;
if (arr[mid] > num) {
end = mid - 1;
} else if (arr[mid] < num) {
start = mid + 1;
} else {
return mid;
}
}
return -1;
}
- 优点:优化了查找的效率。
- 弊端:查找数组必须经过排序(即有序)。