迴圈遍歷,逐一比對關鍵值和陣列元素,時間複雜度o(n)(n為陣列長度);
二分查詢,又稱折半查詢,查詢效率高
以陣列中間元素為界限,將陣列分為前半部分,後半部分;
如果查詢元素大於中間元素,說明查詢元素在前半部分,縮小查詢範圍;
如果查詢元素小於中間元素,說明查詢元素在後半部分,縮小查市價找範圍;
每次查詢範圍減少一半;
演算法: middle=(low+high)/2;
最好的時間複雜度是o(1);
最好的時間複雜度是o(log 2 n);
二分查詢法的改進版本
上面介紹了二分查詢的演算法思想,關鍵在於每次都將查詢範圍縮小一半,但是這種二分查詢的演算法有些過於死板,查詢有些過於被動 ;
比如:如果在1~1000中要查詢5的位置,要是按照二分查詢的方式,那麼要要查詢的次數會很多,那麼大多數人的第一反映一定是從開頭開始查詢,這就是差值查詢的思想,不是根據中間位置來分割槽,而是根據離所求值的距離來進行搜尋
對於二分查詢:middle=(low+high)/2,即middle=low+(high—low)/2;
對於插值查詢:middle = low +(high-low)*(key-array[low])/(array[high]-array[low]);
時間複雜度為o(log2 (log2 n))
二分查詢法的改進版本
斐波那契查詢是根據斐波那契序列的特點對有序表進行分割的。他要求開始表中記錄的個數為某個斐波那契數小1,及n=f(k)-1;開始將k值與第f(k-1)位置的記錄進行比較(即middle=low+f(k-1)-1),比較結果也分為三種
k = middle,middle位置的元素即為所求
k > middle,low=middle+1,k-=2;
說明:low=middle+1說明待查詢的元素在[middle+1,high]範圍內,k-=2 說明範圍[middle+1,high]內的元素個數為n-(f(k-1))= fk-1-f(k-1)=fk-f(k-1)-1=f(k-2)-1個,所以可以遞迴的應用斐波那契查詢。
k < middle,high=middle-1,k-=1。
說明:low=middle+1說明待查詢的元素在[low,middle-1]範圍內,k-=1 說明範圍[low,middle-1]內的元素個數為f(k-1)-1個,所以可以遞迴 的應用斐波那契查詢。
最壞情況的時間複雜度為o(log2 n)
期望的時間複雜度也為o(log2 n)
順序查詢法和二分查詢法
方法1 def shunxu f list,temp for index,i in enumerate f list if i temp return index return none方法2 def shunxu f flist,temp for i in range len f flist if...
線性查詢法 二分查詢法
陣列的查詢 在陣列中尋找特定元素的過程。1 線性查詢法 演算法思路 線性查詢法是將要查詢的關鍵字key與陣列中的元素逐個進行比較,直到列表中找到與關鍵字匹配的元素,或者查完列表也沒有找到。如果匹配成功,返回與關鍵字匹配的元素在陣列中的下標,如果沒有找到則返回 1。適用於小陣列或沒有排序的陣列中查詢,...
二分查詢法(折半查詢法)
二分查詢法 說明 如果搜尋的數列已經有排序,應該盡量利用它們已排序的特性,以減少搜尋比對的次數 這是搜尋的基本原則,二分搜尋法是這個基本原則的代表。解法 在二分搜尋法中,從數列的中間開始搜尋,如果這個數小於我們所搜尋的數,由於數列已排序,則該數左邊的數一定都小於要搜尋 的物件,所以無需浪費時間在左邊...