給定乙個 n 個元素有序的(公升序)整型陣列 nums 和乙個目標值 target ,寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 -1。
順序查詢也稱為線形查詢,屬於無序查詢演算法。
從資料結構線形表的一端開始,順序掃瞄,依次將掃瞄到的結點關鍵字與給定值k相比較,
若相等則表示查詢成功;
若掃瞄結束仍沒有找到關鍵字等於k的結點,表示查詢失敗。
class
solution
}return-1;}}
給定乙個 n 個元素有序的(公升序)整型陣列 nums 和乙個目標值 target ,寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 -1。
二分查詢操作的資料集是乙個有序的資料集。
開始時,先找出有序集合中間的那個元素。
如果此元素比要查詢的元素大,就接著在較小的乙個半區進行查詢;
反之,如果此元素比要找的元素小,就在較大的乙個半區進行查詢。
在每個更小的資料集中重複這個查詢過程,直到找到要查詢的元素或者資料集不能再分割。
給定乙個 n 個元素有序的(公升序)整型陣列 nums 和乙個目標值 target ,寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 -1。
基於二分查詢演算法,將查詢點的選擇改進為自適應選擇,可以提高查詢效率。當然,差值查詢也屬於有序查詢。
class
solution
else
if(nums[mid]
else
}return-1;}}
給定乙個 n 個元素有序的(公升序)整型陣列 nums 和乙個目標值 target ,寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 -1。
斐波那契是是二分查詢的一種提公升演算法,通過運用**比例的概念在數列中選擇查詢點進行查詢,提高查詢效率。同樣地,斐波那契查詢也屬於一種有序查詢演算法。
相對於折半查詢,一般將待比較的key值與第mid=(low+high)/2位置的元素比較,比較結果分三種情況:
1)相等,mid位置的元素即為所求
2)>,low=mid+1;
3)斐波那契查詢與折半查詢很相似,他是根據斐波那契序列的特點對有序表進行分割的。他要求開始表中記錄的個數為某個斐波那契數小1,及n=f(k)-1;
開始將k值與第f(k-1)位置的記錄進行比較(及mid=low+f(k-1)-1),比較結果也分為三種
1)相等,mid位置的元素即為所求
2)>,low=mid+1,k-=2;
說明:low=mid+1說明待查詢的元素在[mid+1,high]範圍內,k-=2 說明範圍[mid+1,high]內的元素個數為n-(f(k-1))= fk-1-f(k-1)=fk-f(k-1)-1=f(k-2)-1個,所以可以遞迴的應用斐波那契查詢。
3)說明:low=mid+1說明待查詢的元素在[low,mid-1]範圍內,k-=1 說明範圍[low,mid-1]內的元素個數為f(k-1)-1個,所以可以遞迴 的應用斐波那契查詢。
class
solution
int left =0;
int right = nums.length -1;
int k =0;
while
(right >= fib[k]-1
)int
temp = arrays.
copyof
(nums,fib[k]);
/*for(int i = 0;iwhile
(left<=right)
else
if(target
)else
}//沒找到
return-1;}}
幾種查詢演算法的比較
1.堆的意義在於最快的找到最大最小值,在堆中插入乙個值,取走最大值或最小值重新構建堆結構,其時間複雜度為o log n 而其它方法至少為 o n 堆在實際中用途不在於排序,堆的應用 a.在於排程演算法中,比如優先順序排程,每次取優先順序最高的.b.可以採用堆構造優先順序佇列,優化dijstra 演算...
幾種合併查詢演算法
問題 實際中需要知道拓撲圖中的2點是否連通,比如電路板 地圖中不同的城市等等,這種問題可以轉化為合併查詢問題,相應的求解可以用合併查詢演算法。基本思想是轉化為長度為n的陣列和已知m對連通對,其值表示了兩個點是否連通。合併查詢演算法 union find 可以有以下幾種 1 快速查詢演算法 mark連...
幾種基本查詢演算法
1.2 折半查詢 1.3 分塊查詢 索引查詢 2 b樹和b 樹 的方法 2.2 b 樹的基本概念 3 雜湊表 4 串5 補充 思想 從線性表的一端開始,與關鍵字逐個比較。若已經比對到表的另一端還沒有匹配成功,則返回查詢失敗資訊 typedef struct sstable intsearch seq...