算法分析与设计实践3
1. 问题
写出两种检索算法:在一个排好序的数组T[1..n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0。
2. 解析
第一种:顺序查找。将给定列表中连续元素和给定的查找建进行比较,直到遇到一个匹配的元素,则查找成功,否则说明查找建不在列表中。
第二种:二分查找。对于一个从小到大排序的有序数组。将n个元素分成两部分,取a[n/2]与查找键x进行比较。如果a[n/2]==x,则找到,如果a[n/2]>x,则主要在数组a的左半部分查找,如果a[n/2]<x,则主要在数组a的右半部分查找。
3. 设计
顺序查找:
for j=1-n{
if a[j]==x{
输出j
flag=1;
break;
}
}
if flag==0
输出j=0
二分查找:
int binarySearch(int a[],int n,int x){
int left=0;
int right=n-1;
while(left<=right){
int middle=(left+right)/2;
if 查找键大于中值
left=middle+1;
else if 查找建小于中值
right=middle-1;
else
返回中值下标
}
返回-1
}
4. 分析
顺序查找:O(n)


二分查找:O(log2n)


5. 源码
github地址:https://github.com/122cmy/myGitTemp3
博客地址:https://www.cnblogs.com/122cmy/

浙公网安备 33010602011771号