1.问题
查找是在大量的信息中寻找一个特定的信息元素。
题目:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中, 输出j=0.按实验模板编写,“分析”部分仅给出复杂度结果即可。
2.解析
顺序查找:按照序列原有顺序对数组进行遍历比较查询的基本查找算法。
顺序查找不需要事先对数组进行排序。
二分查找:一种查找效率较高的算法。但二分查找要求数组是有序的。
以升序为例,先将查找关键字与数组中间位置关键字进行比较,若相等则查找结束;若小于中间位置关键字,则查找数组前半部分;若大于中间位置关键字,则查找数组后半部分。以此重复上述步骤,直到找到关键字或需查找部分不再有关键字则结束。
3.设计
顺序查找
int orderSearch(int array[], int x, int n)
{
int flag=0;
for()
{
if(当前数组关键字==查找关键字)flag=当前位置;
}
return flag;
}
二分查找
int binarySearch(int array[], int x, int start, int end)
{
//array是待查找数组,x是查找关键字,start是查找开始位置,end是查找结束位置
if(start==end && array[start] != x) return 0;
mid = 中间位置
if(中间位置关键字小于查找关键字)查找后半部分
else if(中间位置关键字小于查找关键字)return mid;
else return 查找前半部分
}
4.分析
顺序查找:O(n)
二分查找:O(logn)