喵博主用二分查找的两种写法在一个有序数组中查找数字
写法一:
#include<stdio.h> int BinarySearch(int* arr, int sz, int k) { int left = 0; int right = sz - 1; while (left <= right) { int mid = (left + right) / 2; if (arr[mid] > k) { right = mid - 1; } else if (arr[mid] < k) { left = mid + 1; } else { return mid;//找到返回 } } if (left > right) { return -1;//没有找到 } } int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int sz = sizeof(arr) / sizeof(arr[0]);//数组长度 int k = 0;//找的数字 scanf("%d", &k); int num = BinarySearch(arr, sz, k); if(num == -1) printf("找不到\n"); else printf("找到了,下标是:%d\n", num); return 0; }
写法二:
#include<stdio.h> int BinarySearch(int* a, int sz, int k) { int begin = 0; int end = sz - 1; while (begin <= end) { int mid = begin + ((end - begin) >> 1); if (a[mid] < k) { begin = mid + 1; } else if (a[mid] > k) { end = mid - 1; } else return mid; } return -1; } int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int sz = sizeof(arr) / sizeof(arr[0]); int k = 0; scanf("%d", &k); int num = BinarySearch(arr, sz, k); if(num == -1) printf("找不到\n"); else printf("找到了,下标是:%d\n", num); return 0; }
以上为这篇文章所有内容,如有错误多和喵博主讨论,相互学习相互进步。