在所有的查找算法中,二分查找是最简单一种。二分查找要求原先的序列是已经排序的,每次都是以序列中间的数字作为比较,如果小于中间的数字,那么就在序列左边继续递归查找;如果大于中间的数字,那么就在序列右边继续递归查找。直到找到该数字,或者直到序列中只有一个数字的时候都还没找到,则查找失败。查找的时间复杂度可以达到O(logN),应该说是除了数组按下标查找O(1)以外的最快的查找方式了。示例代码上传至 https://github.com/chenyufeng1991/BinarySearch 。
使用C语言完整实现如下:
// 实现二分查找 #include <stdio.h> #include <stdlib.h> void BinarySearch(int *arr, int start, int end, int num); int main(int argc, const char * argv[]) { int array[] = {4,5,6,7,8,9}; BinarySearch(array, 0, 5, 99); return 0; } void BinarySearch(int *arr, int start, int end, int num) { int mid = (start + end) / 2; if (arr[mid] == num) { printf("%d ",mid); return ; } if (start == end) { printf("没有找到"); return ; } if (num < arr[mid]) { BinarySearch(arr, start, mid, num); } if (num > arr[mid]) { BinarySearch(arr, mid + 1, end, num); } return ; }