•順序查詢
從線性表的一端開始,依次將每個記錄的關鍵字與給定值進行比較,若某個記錄的關鍵字等於給定值,表示查詢成功,返回記錄序號;若將線性表中所有記錄都比較完,仍未找到關鍵字與給定值相等的記錄,則表示查詢失敗,返回一個失敗值。
•折半查詢
又稱為二分查詢。這種查詢方法要求查詢表的資料是線性結構儲存,並且還要求查詢表中的資料是按關鍵字由小到大有序排列。
順序查詢比較簡單,依次用陣列中的每個元素和要查詢的元素進行對比即可。不再貼程式碼說明
折半查詢是一種遞迴過程,每折半一次,可使查詢範圍縮小一半,當查詢範圍縮小到只剩一個元素,而該元素還不是要找的元素,則查詢失敗。
折半查詢說明如下圖:
折半查詢程式碼如下:
1 #include <stdio.h> 2 #define LENGTH 10 3 int source[LENGTH] = {10,12,28,37,54,65,69,86,90,98}; 4 5 //二分查詢,查詢key在原始資料a中的位置 6 int BinarySearch(int a[],int n,int key){ 7 int low,high,mid; 8 9 low = 0; 10 high = n-1; 11 12 while(low<=high){ 13 mid = (low + high)/2; //每次讓中間數取最小和最大的中間 14 if(a[mid] == key) //查詢的元素正好等於中間值 15 return mid; 16 else if(key < a[mid]) //查詢的元素小於中間值,在最小值和上次中間值範圍內查詢 17 high = mid - 1; 18 else 19 low = mid + 1; //查詢的元素大於中間值,在中間值和最大值範圍查詢 20 } 21 22 return -1; 23 } 24 25 int main(){ 26 int i,key,pos; 27 printf("原始資料:\n"); 28 29 for(i = 0 ; i < LENGTH ; i++) 30 printf("%d ",source[i]); 31 32 printf("\n請輸入要查詢的資料:"); 33 scanf("%d",&key); 34 35 pos = BinarySearch(source,LENGTH,key); 36 37 if(pos > -1) 38 printf("\n查詢成功,查詢元素位於第 %d 個",pos); 39 else 40 printf("\n查詢失敗"); 41 42 }