- 问题
写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0. - 解析
顺序查找:在一个线性表中,按照从前往后或者从后往前的顺序依次查找,如果查找到关键字和给定值相等,则返回给定值的位置,查找成功;如果查找值最后一个元素仍未找到,则查找失败。
对分查找:首先将关键字与有序数组内处于中间位置的元素进行比较,如果中间位置上的元素内的数值与查找键不同,根据数组元素的有序性,就可确定应该在数组的前半部分还是后半部分继续进行查找;在新确定的范围内,继续按上述方法进行查找,直到获得最终结果。
-
设计
顺序查找:
int S_Search(int data[],int length, int key){int i = 0;
for(i = 0; i < length; ++i){
if(key == data[i]){
return i;
}
}
return -1;
}
对分查找:
int B_Search(int arr[],int len,int num)
{
int first,middle,last;
first = 0;
last = len - 1;
while(first <= last){
middle = (first + last) ;
if(arr[middle] < num){
first = middle + 1;
}else if(arr[middle] > num){
last = middle - 1;
}else{
return middle;
}
}
return -1;
} -
分析
时间复杂度:
顺序检索:O(n)
二分检索:O(logn)
源码
https://github.com/DicHui/DicHui/tree/main