在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在
T的下标j;如果x不在T中,输出j=0.按实验模板编写,“分析”部分仅给出复杂度
结果即可。
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
void left(int T[], int a) {
if (T[a] == T[a - 1]) {
printf("%d\n", a - 1);
return left(T, a - 1);
}
}
void right(int T[], int a) {
if (T[a] == T[a + 1]) {
printf("%d\n", a + 1);
return right(T, a + 1);
}
}
void binarysearch(int T[10], int x) {
int left = 1;
int right = 10;
bool flag = false;
int mid;
while (left < right) {
mid = (left + right) / 2;
if (T[mid] == x) {
printf("%d\n", mid);
flag = true;
break;
}
else if (x > T[mid])
left = mid + 1;
else right = mid - 1;
}
if (flag) {
left(T, mid);
right(T, mid);
}
else printf("j = 0");
}
void find(int T[], int x) {
bool flag = false;
for (int i = 1; i <= 10; i++) {
if (T[i] == x) {
printf("%d\n", i);
flag = true;
}
}
if (!flag)
printf("j = 0\n");
}
int main() {
int T[MAX];
for (int i = 1; i <= 10; i++) {
scanf_s("%d", &T[i]);
}
find(T, 6);
printf("\n");
binarysearch(T, 6);
}