两个常用的检索算法
前提:在一个排好序的数组T[1…n]中查找x
一、顺序查找
顺序查找在我们这种数据规模不大的情况下还比较适用,毕竟简单,小学生都会。但在大数据情况下完全不能使用,因为顺序查找的时间复杂度是O(n),当n非常非常大的时候,然后运气有非常差的时候,需要非常非常久的时间才能得出结果。
二、二分查找
二分查找是用的比较多的检索算法,既简单又适用。折半计算的核心思想让查找非常高效。
解析:二分查找其实就是在直到数组长度的情况下,设置好左右的下标left=0&right=array.length-1,并且给一个未知数mid/flag=left + (right - left)/2,在while(left <= right)这样一个大前提下,每次去判断array[flag]与给定的数x。如果array[flag] > x,修改left的值,left=flag+1;如果如果array[flag] < x,修改rightt的值,right=flag-1。
源代码:
#include <iostream>
using namespace std;
const int N = 10;
int T[N] = {2, 4, 5, 7, 8, 9, 13, 16, 24, 33};
//顺序查找
int OrSearch(int x){
for(int i = 0; i < N; i++){
if(T[i] == x)
return i;
}
return 0;
}
//二分查找
int BiSearch(int x){
int left = 0;
int right = N - 1;
int flag;
while(left <= right){
flag = left + (right - left) / 2;
if(T[flag] == x)
return flag;
else if(T[flag] > x)
right = flag - 1;
else
left = flag + 1;
}
return 0;
}
int main() {
int x;
cin >> x;
cout << OrSearch(x) << endl;
cout << BiSearch(x) << endl;
return 0;
}