常見演算法學習(C語言實現)(一)

2021-06-27 23:29:03 字數 1164 閱讀 3785

折半查詢,二分搜尋(binary search):

基本思想:

減小順序檔案查詢序列的長度,分而治之的進行關鍵字的查詢。

查詢過程:先確定查詢記錄所在的範圍,然後逐步地縮小查詢的範圍,直到找到目標關鍵字為止(也有可能查詢失敗)。

int binary_search(int array, int length, int target)

return -1; /*查詢失敗,返回-1*/

}

注意:折半查詢適用於有序的資料記錄,以上事例為資料記錄為遞增情況下的演算法。若在資料紀錄為遞減的情況下,具體**需要稍加改動。

思考以下**,你會發現什麼問題?

middle = (low + high) / 2;

如果我們查詢的資料序列長度十分龐大,那麼在某些情況下 (low + high) 會不會超出 middle 所定義資料型別的表達範圍,導致資料溢位,這樣 middle 的值還會是我們想要的值嗎?所以我們要對演算法進行改進,將原先的表示式替換為下面的表示式會更為穩妥。

middle = low + (high - low) / 2;

還有乙個問題,如果 target 並不處於我們查詢的有序遞增陣列 array 的最小值與最大值範圍之內,我們還需要一遍又一遍的執行 while 迴圈直到條件不滿足才退出嗎?我想應該不需要,所以我們最好在開頭新增乙個簡單的判斷語句來避開這種情況,**如下。

if((target < array[low]) || (target > array[high]))

return -1; /*查詢物件小於最小值或大於最大值,查詢失敗,返回-1*/

最後,修改後的演算法如下所示:

int binary_search(int array, int length, int target)

return -1; /*查詢失敗,返回-1*/

}

。。。

常見演算法的C語言實現

氣泡排序 bubble sort 就是一種交換排序,它的思想就是兩個元素進行比較,如果是反序則交換,直到沒有反序的元素為止。include 兩個數進行交換的函式 void swap int num1,int num2 氣泡排序的具體實現 void bubblesort int arr,int len...

演算法C語言實現 一

程式3 5 厄拉多塞篩 從1到n,如果查詢到乙個數a是素數,那麼將2 a,3 a,m a m a 質數,又稱為素數,指在乙個大於1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數。include define n 10000 main for i 2 i n i for i 2 i n i...

C語言實現幾種常見排序演算法

worker.c created on 2010 7 1 author panfei include void swap int x,int y 插入排序 公升序 void insertsort int arr,int size arr j 1 to insert 選擇排序 降序 void sele...