順序表查詢法,**簡單但是不智慧型。
1.折半查詢法-binary search
如果線性表在排序是有序的 這種情況下我們才用順序儲存。
//折半查詢法
int binarysearch(int* a,int n, int key)
else
return mid;
} return -1;//表示失敗
}
折半查詢法類似於把靜態有序查詢表分成了兩顆子樹,時間複雜度為o(log n),當我們對順序資料已經排序好,並且沒有頻繁插入刪除時用折半查詢法。
2.插值查詢法
不一定非要mid=(low+high)/2;
mid=(low+high)/2=low+(high-low)/2;
mid = low+(high-low)((key-a[low])/(a[high]-a[low])
)
//插值查詢法
int binarysearch(int* a, int n, int key)
else
}return -1;
}
此時時間複雜度還是o(longn),當關鍵字分部比較均勻時候可用此法。
3.斐波那契查詢o(log n)
//斐波那契數列
void fibonacci()
}int fibonacci_search(int* a, int n, int key)
for(int i=n-1;ia[mid])
else
else
}}}
應當說 當順序儲存無序時 採用順序查詢法
當順序儲存已經排序好 我們可以採用折半查詢法mid=(low+high)/2;
插值查詢法mid=low+(high-low)*((key-a[low])/(a[high]-a[low]));
斐波那契法mid=low+f[k-1]=1;
以上三中演算法無非就是mid 選取的不一樣而已 不過在mid 選取時候也有加減乘除計算的。
查詢 有序表查詢
1 折半查詢 折半查詢又稱二分查詢,時間複雜度為 2 插值查詢 插值查詢是另一種有序表查詢演算法,其核心就在於插值公式 3 斐波那契查詢 4 三種有序表查詢演算法比較 三種有序表查詢本質上是分隔點的選擇不同,折半查詢分隔點是 折半查詢進行加法和除法運算 mid low high 2 插值查詢進行複雜...
有序表查詢
順序表查詢法,簡單但是不智慧型。1.折半查詢法 binary search 如果線性表在排序是有序的 這種情況下我們才用順序儲存。折半查詢法 int binarysearch int a,int n,int key else return mid return 1 表示失敗 折半查詢法類似於把靜態有...
有序表查詢
折半查詢 折半查詢又稱為二分查詢,它的前提是線性表中的記錄必須是關鍵碼有序,線性表必須採用順序儲存。折半查詢的基本思想是 在有序表中,取中間記錄作為比較物件,若給定值與中間記錄相等,則查詢成功 若給定值小於中間記錄關鍵字,則在中間記錄的左半區繼續查詢 若給定值大於中間記錄關鍵字,則在中間記錄的右半區...