1.问题.
写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0。
2.解析
顺序查找:
从数组的第一个数开始按顺序查找,将每一个数与x相比,如果相等输出下标j,如果到结尾了还没找到,则输出j=0。
二分查找法:
将x和数组中间值T[m]比较,相等则查找成功,如果不相等则看x大于还是小于T[m],逐渐缩小范围,直到查找到下标j。若查找结束,得出x不在数组中,返回j=0。
3.设计
顺序查找:
1.设置哨兵;
2.设置查找的起始下标i=n;
3.若r[i]=k,则返回当前i的值;否则,继续比较前一个记录
二分查找法:
1.设置初始查找区间:low=1;high=n;
2.测试查找区间[low,high]是否存在,若不存在则查找失败
3.若存在,取中间点mid=(low+high)/2;比较k与r[mid];有以下三种情况:
3.1若k>r[mid],low=mid+1;在右半区继续进行查找,判断2;
3.2若k<r[mid],low=mid-1;在左半区继续进行查找,判断2;
3.3若k=r[mid],则查找成功,返回表中的mid值。
4.分析
顺序查找:O(n)
二分查找:O(logn)
5.源码
https://github.com/Lillyooo/-Lily/commit/61fc6b927c1fa70d245998aaec7cefd6f87c0c6d