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 二分查詢 二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能...