二分查找递归非递归

    xiaoxiao2021-12-14  56

    #include <iostream> using namespace std; #include <assert.h> //[]边界 //[) int Binsearch(int *arr, int len,int key) { assert(arr); int begin = 0; int end = len-1; // len int mid; while (begin <= end) // < { //mid = (begin + end) / 2; 溢出 mid = begin + ((end - begin) >> 1); //注意操作符的优先级 if (arr[mid] < key) { begin = mid + 1; //两个下标相邻 加不上 } else if (arr[mid] > key) { end = mid - 1; //-1 开区间 } else return mid; } return -1; } //递归 int BinsearchR(int *arr, int begin, int end, int key) //问清楚 { assert(arr); if (begin > end) return -1; int mid = begin + ((end - begin) >> 1); //优先级 if (arr[mid] == key) return mid; else if (arr[mid] > key) BinsearchR(arr, begin, mid-1, key); else if (arr[mid] < key) BinsearchR(arr, mid + 1, end, key); } int main() { int arr[] = { 2,5,8,9,74,87,96 }; int len = sizeof(arr) / sizeof(int); cout << BinsearchR(arr,0, len, 2) << endl; cout << BinsearchR(arr,0, len, 96) << endl; cout << BinsearchR(arr,0, len, 9) << endl; cout << BinsearchR(arr,0, len, 74) << endl; return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-971100.html

    最新回复(0)