(1)问题
在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.按实验模板编写,“分析”部分仅给出复杂度结果即可。
(2)解析
要查找排好序的数组中的一个数,返回下标可以用的查找的方法很多,这里采用顺序查找和二分查找。顺序查找按照数组原有序列进行查找,二分查找则是每次让左右边界的中间位置的值跟需要查找的相比较,并不断缩小左右边界,直到找到或者左边界大于右边界。
(3)设计
伪代码
//二分查找
BinarySearch(max,min,des)
mid-<(max+min)/2
while(min<=max)
mid=(min+max)/2
if mid=des then
return mid
elseif mid >des then
max=mid-1
else
min=mid+1
return max
//顺序查找
1. 设置哨兵;
2. 设置查找的起始下标i=n;
3. 若r[i]与k相等,则返回当前i的值;
否则,继续比较前一个记录;
(4)分析
二分查找
时间复杂度为O(logN)
int binarySearch(int list[],int left,int right,int number){
if(list==NULL)
return -1;
int index=0;
int mid=(right+left)/2;
if(left>right){
return -1;
}
if(number==list[mid]){
index=mid;
return index;
}else if(number>list[mid]){
binarySearch(list,mid+1,right,number);
}else{
binarySearch(list,left,mid-1,number);
}
}
顺序查找
时间复杂度为O(n)
int seqSearch(int list[],int number){
if(list==NULL)
return -1;
int index=0;
while(list[index]){
if(list[index] == number){
return index;
}else{
index++;
}
}
return -1;
}