折半查詢
折半查詢又稱為二分查詢,它的前提是線性表中的記錄必須是關鍵碼有序,線性表必須採用順序儲存。折半查詢的基本思想是:在有序表中,取中間記錄作為比較物件,若給定值與中間記錄相等,則查詢成功;若給定值小於中間記錄關鍵字,則在中間記錄的左半區繼續查詢;若給定值大於中間記錄關鍵字,則在中間記錄的右半區繼續查詢。不斷重複上述過程,直到查詢成功,或所有記錄都已查完,查詢失敗為止。
折半查詢的演算法**如下:
/*折半查詢*/
int binary_search(int* a, int n, int key)
else if (key < a[mid])
else
}return -1;
}
演算法很容易理解,每一次迴圈都將待比較陣列切半,而不必像順序查詢那樣依次比較,因此它的效率會非常高
插值查詢
/*插值查詢*/
int interpolation_search(int* a, int n, int key)
else if (key < a[mid])
else
}return -1;
}
只是將原來的mid = (low + high) / 2改為mid = low + (high - low) * (key - a[low]) / (a[high] - a[low]),仔細琢磨就會發現,這種演算法就是在待比較資料分布比較均勻的時候,利用key值在待比較表中的比例來增加折的力度,因此演算法受限程度較大,只有在資料分布較均勻的時候,插值演算法的平均效能要好於折半查詢,若果資料分布不均勻,插值查詢就不太合適了。 查詢 有序表查詢
1 折半查詢 折半查詢又稱二分查詢,時間複雜度為 2 插值查詢 插值查詢是另一種有序表查詢演算法,其核心就在於插值公式 3 斐波那契查詢 4 三種有序表查詢演算法比較 三種有序表查詢本質上是分隔點的選擇不同,折半查詢分隔點是 折半查詢進行加法和除法運算 mid low high 2 插值查詢進行複雜...
有序表查詢
順序表查詢法,簡單但是不智慧型。1.折半查詢法 binary search 如果線性表在排序是有序的 這種情況下我們才用順序儲存。折半查詢法 int binarysearch int a,int n,int key else return mid return 1 表示失敗 折半查詢法類似於把靜態有...
有序表查詢
順序表查詢法,簡單但是不智慧型。1.折半查詢法 binary search 如果線性表在排序是有序的 這種情況下我們才用順序儲存。折半查詢法 int binarysearch int a,int n,int key else return mid return 1 表示失敗 折半查詢法類似於把靜態有...