C語言:遞迴和非遞迴實現二分查詢
阿新 • • 發佈:2019-01-31
二分查詢是將有序數列不斷地縮小,直到找到改元素或折半區域的首元素位置高於尾元素位置為止。
//遞迴寫二分查詢 int BinarySearchD(int arr[], int x, int begin, int end) { if (begin <= end) { int mid = begin + ((end - begin) >> 1); if (arr[mid] == x) { return mid; } else if (arr[mid] < x) { return BinarySearchD(arr, x, mid + 1, end); } else if (arr[mid] > x) { return BinarySearchD(arr, x, begin, mid - 1); } else { return -1; } } }
//非遞迴二分查詢 int BinarySearch(int arr[], int x,int begin,int end) { while (begin <= end) { int mid = begin + ((end - begin) >> 1); if (arr[mid] == x) { return mid; } else if (arr[mid] < x) { begin = mid + 1; } else if (arr[mid]>x) { end = mid - 1; } else { return mid + 1; } } return 1; }
int main()
{
int array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int len = sizeof(array) / sizeof(array[0]);
int begin = 0;
int end = len;
printf("%d ", BinarySearch(array, 8, begin, end));
printf("%d ", BinarySearchD(array, 8, begin, end));
system("pause");
return 0;
}