参考如下:
#include<stdio.h>
#include <math.h>
#define N 15
int search(int* arr, int m, int M, int k)
{
int max = M;
int min = m;
int flag = 0; // 默认标识为0,表示未找到
while (min <= max)
{
int mid = round((max + min) / 2.0);
if (arr[mid] <= k)
{
min = mid + 1;
}
else if (arr[mid] > k)
{
max = mid - 1;
}
if (arr[mid] == k)
{
flag = 1; // 找到了,标识设为1
}
}
// 没有找到
if (flag == 0)
max = -1; // -1 表示未找到
return max;
}
int main(){
int a[N], i;
for(i = 0; i < N; i++)
scanf("%d", &a[i]);
int k;
scanf("%d", &k);
int result = search(a, 0, N - 1, k);
if (result == -1)
{
printf("NO\n");
}
else
{
printf("%d\n", result);
}
return 0;
}
供参考:
#include <stdio.h>
#define N 15
int find_key(int* arr, int n, int key)
{
int left = 0, right = n - 1, mid;
while (left <= right) {
mid = (left + right) / 2;
if (arr[mid] > key)
right = mid - 1;
else if (arr[mid] < key)
left = mid + 1;
else
return mid;
}
if (left > right)
return -1;
}
int main()
{
int a[N] = { 1, 3, 5, 7, 9, 10, 13, 15, 16, 17, 20, 21, 22, 23, 24 }, k, i;
for (i = 0; i < N; i++)
scanf("%d", &a[i]);
scanf("%d", &k);
k = find_key(a, N, k);
if (k < 0)
printf("NO");
else
printf("%d", k);
return 0;
}