开篇
本文主要是利用递归法来实现一个简单的二分搜索程序。题目来源是《编程珠玑》第4章课后习题3。
问题概要
编写并验证一个递归的二分搜索程序, 并返回t在数组x[0…n-1]中第一次出现的位置。
思路分析
本题的思路与第一版相似,不过不同的是,为确保返回的t的索引为t在数组中第一次出现的位置,所以在查找到t后,要进一步的向左查找,看是否有其他的t的存在。
代码实现
#include <stdio.h>
int binary_search_plus(int x[], int l, int u, int t) {
if (l > u) {
return -1;
}
int m = (l + u) / 2;
if (x[m] == t) {
//
while (m > 0 && x[m - 1] == t) {
m--;
}
return m;
}
else if (x[m] < t) {
return binary_search_plus(x, m + 1, u, t);
}
else {
return binary_search_plus(x, l, m - 1, t);
}
}
int main() {
int x[]= { 2, 5, 7, 12, 18, 20, 24, 24, 24, 30 };
int n = sizeof(x) / sizeof(x[0]);
int t = 24;
int result = binary_search_plus(x, 0, n - 1, t);
if (result != -1) {
printf("%d在数组中第一次出现的位置是%d.\n", t, result);
}
else {
printf("%d不存在于数组中.\n", t);
}
return 0;
}
运行结果
注
希望本文对您能有所帮助!
日拱一卒无有尽, 功不唐捐终入海。
共勉!