这是《小白C语言编程实战》系列的第21篇。
上一篇:小白C语言编程实战(20):实现strcpy()函数
题目
按递增的方式依次输入总共n个整数;然后查找整数x是否在这些数之中。如果在,则返回x在这些整数所构成数组中的下标位置,否则返回-1。要求采用折半查找法实现。
要求
输入输出格式示例1:
输入:
10<回车>
10 20 30 40 50 60 70 80 90 100<回车>
90<回车>
输出:position=9
输入输出格式示例2:
输入:
10<回车>
10 20 30 40 50 60 70 80 90 100<回车>
5<回车>
输出:not found!
提示
-
定义折半查找函数
binSearch; -
在主函数中定义数组,依次输入个数n、该组数据、以及要查找的数据,然后调用函数
binSearch进行查找。
参考代码
#include <stdio.h>
#include <stdlib.h>
// 折半查找:找到数x在从小到大有序数组a中的下标位置,
// 并返回,如果没找到返回-1
int binSearch(int *a, int n, int x) {
// a[low...mid...high]
int low = 0;
int high = n-1;
while(low<=high) {
int mid = (low+high)/2;
int v = *(a+mid);
if(v > x) {
// 说明要找的数,一定在[low,mid-1]这半边
high = mid - 1;
} else if(v < x) {
// 说明要找的数,一定在[mid+1,high]这半边
low = mid + 1;
} else {
// 找到,提前返回下标
return mid;
}
}
return -1;
}
int main(int argc, char *argv[]) {
int n;
int x;
scanf("%d", &n);
// 定义长度为n的数组
int i, a[n];
for(i=0;i<n;i++) {
scanf("%d", &a[i]);
}
// 输入要查找的数x
scanf("%d", &x);
int pos = binSearch(a, n, x);
if(pos >= 0) {
printf("position=%d", pos+1);
} else {
printf("not found!");
}
return 0;
}
本文介绍了如何使用C语言实现折半查找算法,通过示例演示如何输入一组整数并查找目标值,若存在则返回其下标,不存在则返回-1。重点在于binSearch函数的实现和主函数中的应用。
768

被折叠的 条评论
为什么被折叠?



