資料結構 查詢演算法(折半查詢)

2021-09-27 16:48:11 字數 696 閱讀 4305

當乙個順序表的元素是有序排列的,這時我們才可以使用折半查詢。我們查詢的過程是找到中間位置判斷這個位置上的值是不是目標值,若是則直接找到,若不是,判斷中間位置上的值與目標值的大小關係,若是大於目標值說明我們要查詢的目標值在前半部分,小於則說明是在後半部分,然後我們在要找的部分裡面用上面同樣的方式查詢,直到找到元素或發現沒有元素則退出。

#include

using namespace std;

//折半查詢演算法,查詢成功返回元素下標,查詢失敗返回-1。

int binary_search

(int array[

],int len, int key)

else

if(array[mid]

> key)

else

}return-1

;//未找到時返回-1

}int main()

; int len =

sizeof

(arr)

/sizeof

(arr[0]

);for(int i =

0; i < len; i++

)return0;

}

折半查詢每次查詢相當於把篩選的範圍減小了一半,所以時間複雜度為log2n。需要注意的是,折半查詢只適用於順序儲存的有序表。

[參考文件]資料結構–王道考研

資料結構 查詢 折半查詢

簡單介紹下折半查詢,折半查詢僅適用於有序的順序表。查詢成功的平均查詢長度為log2 n 1 1 折半查詢判定樹的樹高為log2 n 1 向上取整 下面投放折半查詢 include include define maxsize 50 define keytype int 順序表結構體 typedef ...

資料結構 折半查詢

1 折半查詢需要查詢表中的資料有序的排列,首先將查詢關鍵字k與表中間的元素r mid 進行對比,若k r mid 則將最左端的下標low更新為mid右邊的第乙個下標,繼續進行折半查詢 若k折半查詢的平均查詢長度為 時間複雜度為o log n 2 折半查詢實現演算法 首先輸入乙個有序的序列再輸入需要查...

資料結構 折半查詢

假設有序表按關鍵碼公升序排列,取中間記錄作為比較物件,若給定值與中間記錄相等,則查詢成功 若給定值小於中間記錄,則在有序表的左半區繼續查詢 若給定值大於中間記錄,則在有序表的右半區繼續查詢。不斷重複上述過程,知道查詢成功或者查詢區域無記錄,查詢失敗。private static intbinarys...