C语言 用折半查找算法在给定的有序序列中查找与给定值k相等的第一个元素,输出其所在位置及比较的次数

C语言 用折半查找算法在给定的有序序列中查找与给定值k相等的第一个元素,输出其所在位置及比较的次数例如:在序列(9,11,15,20,32,36,58,85,96)中查找96,则输出为:在第9个位置,比较了4次。

#include <stdio.h>
#include <string.h>

int BinFind(int a[],int n,int num,int *times) {
int mid,start = 0;
int end = n - 1;
++*times;
if(a[start] == num) return start;
++*times;
if(a[end] == num) return end;
while(start < end) {
++*times;
mid = (start + end)/2;
if(a[mid] == num) return mid;
else if(a[mid] > num) end = mid - 1;
else start = mid + 1;
}
return -1;
}

int main() {
int a[] = {9,11,15,20,32,36,58,85,96};
int pos,i,num = 96;
int n = sizeof(a)/sizeof(a[0]);
int times = 0;//查找次数
pos = BinFind(a,n,num,&times);
printf("待查序列为:\n");
for(i = 0; i < n; ++i) printf("%d ",a[i]);
printf("\n");
if(pos >= 0) {
printf("s[%d] = %d\n",pos,num);
printf("共查找%d次。\n",times);
}
else printf("没找到数值%d,对不起。\n",num);
return 0;
}

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答