1.1氣泡排序
氣泡排序的基本原理是: 依次比較相鄰的兩個數,將大數放在前面,小數放在後面,也即首先比較第乙個和第二個數,將大數放在前面,小數放在後面。然後比較第2個數和第3個數,將大數放前,小數方後,依次直至比較最後兩個數。如此在第一輪最後的數必定是所有數中最小的,然後重複以上過程將所有小數放在最後。到所有數都已經有序時演算法結束。
演算法如下:
void bubblesort(int* pdata, int count)}}
1.2雞尾排序,在氣泡排序的基礎上進行雙向排序,又稱雞尾酒排序,如下:
void cocktail(int* pdata, int count)
}i++;
for(j=i;j
}tail--;
}1.3 選擇排序
選擇排序從需要排序的佇列資料中選擇最小的同第乙個值交換,再從剩下的部分中選擇最小的與第二個交換,這樣往復下去,最後實現全佇列排序。
void slectsort(int* pdata,int count)
} pdata[ipos]=pdata[i];
pdata[i]=itemp;
}1.4直接插入排序
直接插入排序相對較為複雜,它的基本工作原理可以做乙個比喻,抽出牌,在前面的牌中尋找相應的位置插入,然後繼續下一張。依次取帶排列陣列的元素,將其插入到前面的有序陣列中。
void insertsort(int* pdata,int count)
pdata[ipos+1]=itemp;
}1.5歸併排序
歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法使採用分治法的乙個非常典型的應用。在排序時將兩種已經排好的序列合併成乙個序列的操作。
void merge(int array,int p, int q, int r)
else
//while(begin2<=end2)
for(i=0;i<(r-p+1);i++)}}
void merge_sort(int array, unsigned int first, unsigned int last)
}1.6快速排序
快速排序基於分治法,在進行排序時具體分為三個步驟:
1)將對排序的序列進行分解,序列l[m..n]被劃分成兩種可能為空的子串行l[m..pivot-1]和l[pivot+1..n】,使l[m..pivot-1]的每個元素均小於或等於l[pivot],同時l[pivot+1..n]的每個元素均大於l[pivot]。其中l[pivot]稱為這一輪分割中的樞軸。
2)通過對遞迴調快速排序,對子序列l[m..pivot-1]和l[pivot+1..r]排序。
3)最後兩種子串行是已經排序的,所以對它們合併時,整個序列l[m..n]已經排好序。
**實現:
雜湊演算法相關梳理
1.基本概念 雜湊也成為 雜湊 任意長度的輸入,經過雜湊演算法變換成固定長度的輸出。雜湊值會產生碰撞,因為固定長度的雜湊值表示的範圍是有限的,但輸入值的範圍是無限的。通過原始資料通過相同的雜湊演算法可以計算出相同的雜湊值,但是通過雜湊值無法恢復原始資料 不同的雜湊演算法,雜湊值長度不同,但相同的雜湊...
演算法相關概念解釋
演算法 演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。演算法的特性 有窮性,確定性,可行性,輸入,輸出。演算法的設計要求 正確性,可讀性,健壯性,高效率和低儲存。演算法的度量方法 事後統計法 不科學,不準確 事前分析估計法。輸入輸出 演算法有零個...
進化演算法相關概念
進化演算法是為了克服傳統優化方法的缺點而設計的一類演算法。為了解決目標函式的導數不存在或無法求得,但又要求函式的全域性最優解的問題。進化演算法是模擬生物進化或遺傳原理而設計的一類隨機搜尋的優化演算法,屬於不確定優化方法。進化演算法是以達爾文的演化論為基礎,模仿自然界 優勝劣汰 適者生存 的優化過程對...