#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int research(int arr[], int goal, int left, int right){
while (left <= right){
int mid = left + ((right - left) / 2);//求出中间元素的位置
if (goal<arr[mid]){
right = mid - 1;
}
if (goal>arr[mid]){
left = mid + 1;
}
if (goal==arr[mid]){
return mid;
}
}
return -1;
}
int main(){
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int left = 0;
int right = (sizeof(arr) / sizeof(arr[0])) - 1;
int ret=research(arr, 4, left, right);
if (ret == -1){
printf("没有这个数\n");
}
else
printf("这个数的下标为:%d\n", ret,);
system("pause");
return 0;
}
利用这种方式可大大减少查找的次数,但要求数组必须为有序的。