1. 问题
在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0
2. 解析
1.顺序查找:从第一个元素x开始逐个与需要查找的元素key进行比较,当x=key时返回x的下标,如果比较到最后都没有找到,则返回j=0;
2.二分查找:不断地将有序数组进行对半分割,并检查每个分区的中间元素
3. 设计
//顺序查找核心伪代码
for (每一个元素x) {
if (x == key) {
返回x的下标;
flag = 1;
break;
}
}
if (flag == 0)
返回j=0;
//二分查找核心代码
while(1){
if(count>len){
printf("j=0\n");
break;
}
if(n==arr[(a+b)/2]){
printf("%d\n",(a+b)/2);
count++;
break;
}
else if(n>arr[(a+b)/2]){
a=(a+b)/2;
count++;
continue;
}
else{
b=(a+b)/2;
count++;
continue;
}