查詢演算法之順序查詢和二分查詢

2021-10-06 10:57:22 字數 1978 閱讀 1418

1.順序查詢

基本思想:從資料結構線性表一端開始,順序掃瞄,依次將掃瞄到的關鍵字值與給定key相比較,若相等則表示查詢成功 ;若掃瞄結束仍沒有找到關鍵字等於key值的結點,表示查詢失敗。

順序查詢適合於儲存結構為順序儲存或鏈結儲存的線性表。

**如下:

#include

#include

using

namespace std;

const

int maxn =

110;

int arr[maxn]

;int

sequencesearch

(int arr,

int key,

int n)

;int

main()

printf

("請輸入要查詢的值: ");

scanf

("%d"

,&key)

;int k =

sequencesearch

(arr, key, n);if

(k !=-1

)printf

("該值在陣列下標為%d的位置"

, k)

;else

printf

("該值不存在!");

return0;

}int

sequencesearch

(int arr,

int key,

int n)}if

(flag ==0)

return-1

;}

編譯執行結果如圖所示:

2.二分查詢

基本思想:二分查詢也稱折半查詢,中間結點將整個有序表分成兩個子表,先將中間結點的關鍵字與給定的key值進行比較,若相等則查詢成功;若不相等,則比較key值與中間結點關鍵字的大小,若key值小於中間結點關鍵字值,就繼續在左邊的字表進行二分查詢,反之,在右邊的字表進行二分查詢。遞迴進行,直到查詢到或查詢結束發現表中沒有這樣的結點。

二分查詢的表必須是有序的,如果是無序的需要進行排序;二分查詢是一棵二叉排序樹,每個根節點的值都大於左子樹的所有結點的值,小於右字數所有結點的值。

**如下:

#include

#include

#include

using

namespace std;

const

int maxn =

110;

int arr[maxn]

;int

binarysearch

(int arr,

int key,

int n)

;int

main()

printf

("請輸入要查詢的值: ");

scanf

("%d"

,&key)

;sort

(arr, arr+n)

;//排序函式

int k =

binarysearch

(arr, key, n);if

(k !=-1

)printf

("該值存在!");

else

printf

("該值不存在!");

return0;

}int

binarysearch

(int arr,

int key,

int n)

return-1

;}

編譯執行的結果如圖所示:

參考文章

列表查詢之順序查詢和二分查詢

1.順序查詢 時間複雜度為 順序查詢 def linear search li,val 遍歷列表li for ind,v in enumerate li if v val return ind else return none if name main li 1,2,3,4,5,6 a linear...

順序查詢和二分查詢

二分查詢 陣列裡查詢某個元素 search函式 其中 array為陣列,k為要找的值,low為查詢範圍的最小鍵值,high為查詢範圍的最大鍵值 function search array,k,low 0,high 0 if low high 如果還存在剩餘的陣列元素 elseif k array m...

順序查詢和二分查詢

1 順序查詢 又稱線性查詢,是從陣列的第乙個元素開始查詢,直到找到待查詢元素的位置。順序查詢適合於儲存結構為順序儲存或鏈結儲存的線性表。使用for迴圈等實現。int find int a,int x return index 2 二分查詢 二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能...