有序数组中查找某个数的下标(顺序查找+二分查找)

1、问题

在一个排好序的数组T[1..n]中查找x

如果x在T中,输出x在T的下标 pos;

如果x不在T中,输出 pos = 0 。

2、解析

顺序查找:

在数组T中一个一个地查找下去,如果找到x就记录下标pos然后退出,如果完整一遍查找下来都没找到输出0。

二分查找:

二分查找适合对已经排序好的数据集合进行查找。主要思想为根据R(右边界)和L(左边界)确定出集合中最中间的mid元素,将数据集合划分为两个子集,将mid元素和关键字key进行比较,如果大于关键字key,则R=mid-1,在前一个数据集合中查找;否则L=mid+1,并在后一个子集中查找,直到L>R为止。因为如果没查找到会一直修改L边界和pos值,所以最后需要特判是否真的找到了。

3、设计

顺序查找:

1 for i <- 1 to 100
2         if T[i]==x//如果找到了元素X,记录它的下标,直接退出 
3             pos=i
4             break

二分查找:

 1 l <- 1 
 2     r <- 100
 3     while r >= l 
 4         mid <- (l+r)/2//二分一个中间值mid 
 5         if T[mid]<=x//如果中间值mid比X小,说明要找的区间在右边,修改l边界 
 6             l=mid+1
 7             pos=mid
 8         else r=mid-1//反之,说明要找的区间在左边,修改r边界 
 9     if T[100]!=x
10         pos=0//因为如果没查找到会一直修改l边界和pos值,所以最后需要特判是否真的找到了 

4、分析

顺序查找算法的时间复杂度为 O(n)
二分查找算法的时间复杂度为 O(log(n))
5、源码

https://github.com/ChenyuWu0705/Algorithm-Analyze-and-Design/blob/main/linear%20search.cpp

https://github.com/ChenyuWu0705/Algorithm-Analyze-and-Design/blob/main/Binary%20Search.cpp

 

posted @ 2021-03-22 15:47  programmer_w  阅读(0)  评论(0)    收藏  举报