折半查找是一种用来查找有序数列的数字的重要方法,我们应该在紧张疲劳的状态下能够在纸上熟练写出这段代码.
先来一段非函数形式的代码.
#include<stdio.h>
#include<stdlib.h>
int main(){
int num = 8;
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int size = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = size - 1;
while (left <= right){
int mid = (left + right) / 2;
if (num < arr[mid]){
right = mid - 1;
}
else if (num>arr[mid]){
left = mid + 1;
}
else{
printf("找到了,下标为%d\n", mid);
break;
}
}if (left > right){
printf("-1\n,");
}
system("pause");
return 0;
}
再来一段函数形式的二分查找,实际效果是一样的
#include<stdio.h>
#include<stdlib.h>
int binarySearch(int arr[], int key, int left, int right){
int mid;
while (left <= right){
mid = (left + right) / 2;
if (arr[mid] > key){
right = mid - 1;
}
else if (arr[mid] < key){
left = mid + 1;
}
else if (arr[mid] = key){
return mid;
break;
}
}
while (left > right){
printf("找不到!");
}
}
int main(){
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int size = sizeof(arr) / sizeof(arr[0]);
int ret = binarySearch(arr, 7, 0, size - 1);
printf("下标为:%d\n", ret);
system("pause");
return 0;
}