折半查詢c 的兩種方法實現

2021-07-27 15:56:19 字數 2239 閱讀 1371

折半查詢在資料結構演算法中是乙個比較實用的演算法。

但是它是乙個只能用於查詢有順序的數,這並不影響它的使用,可以先實現乙個排序再進行查詢。

折半查詢比較簡單,但是注意的點也比較多。

下面我將用遞迴和非遞迴兩種方法進行實現。

非遞迴:

在取頭尾時有兩種選擇:左閉右閉[begin,end],左閉右開[begin,end)

這兩個不同的選擇會影響後面的條件判斷

時間複雜度o(log2n)

int binarysearch(int len,int* arr,int x)

else if (arr[mid]>x)

else

return -1; }}

int main()

; int len = sizeof(arr) / (sizeof(arr[0]));

cout << binarysearch(10, arr, 1) << endl;

cout << binarysearch(10, arr, 2) << endl;

cout << binarysearch(10, arr, 3) << endl;

cout << binarysearch(10, arr, 4) << endl;

cout << binarysearch(10, arr, 5) << endl;

cout << binarysearch(10, arr, 6) << endl;

cout << binarysearch(10, arr, 7) << endl;

cout << binarysearch(10, arr, 8) << endl;

cout << binarysearch(10, arr, 9) << endl;

cout << binarysearch(10, arr, 10) << endl;

cout << binarysearch(10, arr, 11) << endl;

}

上面這個**就是左閉右閉的情況,它在while裡begin < end,在if裡將mid + 1賦值給begin,mid-1賦值給end

下面這個**是左閉右開的情況,它在while裡begin <= end,在if裡將mid直接賦值給begin和end

int binarysearch(int len, int* arr, int x)

else if (arr[mid]>x)

else

return -1; }}

int main()

; int len = sizeof(arr) / (sizeof(arr[0]));

cout << binarysearch(10, arr, 1) << endl;

cout << binarysearch(10, arr, 2) << endl;

cout << binarysearch(10, arr, 3) << endl;

cout << binarysearch(10, arr, 4) << endl;

cout << binarysearch(10, arr, 5) << endl;

cout << binarysearch(10, arr, 6) << endl;

cout << binarysearch(10, arr, 7) << endl;

cout << binarysearch(10, arr, 8) << endl;

cout << binarysearch(10, arr, 9) << endl;

cout << binarysearch(10, arr, 10) << endl;

cout << binarysearch(10, arr, 11) << endl;

}

遞迴: 同樣非遞迴也分兩種:左閉右閉和左閉右開,在這裡我急就只介紹一種,選擇了我喜歡的,在你們寫的話只要分清楚兩種就好

int binarrysearch(int* arr, int x, int begin, int end,int len)

int mid = begin + (end - begin) >> 1;

if (arr[mid] < x)

else if (arr[mid] > x)

else

}}

我就是看著**簡單,根本沒有當做一回事,以至於犯了錯誤,

希望能對你們有用,千萬不要小看任何乙個簡單的**

折半查詢法的兩種實現

折半查詢法的兩種實現 折半查詢法 在有序表中,把待查詢資料值與查詢範圍的中間元素值進行比較,會有三種情況出現 1 待查詢資料值與中間元素值正好相等,則放回中間元素值的索引。2 待查詢資料值比中間元素值小,則以整個查詢範圍的前半部分作為新的查詢範圍,執行 1 直到找到相等的值。3 待查詢資料值比中間元...

列表查詢的兩種方法

列表查詢 從列表中查詢指定元素 輸入 列表 待查詢元素 輸出 元素下標或未找到元素 二分查詢 1.順序查詢 時間複雜度為o n def linear search data set,value for i in range len data set if value data set i retur...

C 兩種方法實現棧(stack)

我們用乙個問題來說。問題是這樣的 實現乙個序列,該序列中包含n個棧si i 1,2,3,n 棧中存放的都是int型別的整數,並能夠完成以下操作 為了簡單,沒有對類分離,寫在了乙個檔案裡,有興趣的小夥伴們可以嘗試著將類分離開 由於向量直接提供了類似的 入棧和出棧函式,所以我想建立乙個陣列,陣列中的元素...