常見經典排序演算法總結

2021-10-10 02:15:27 字數 1819 閱讀 5825

演算法幾乎是每個軟體從業者都會或多或少需要接觸的內容,而排序則是演算法中最基礎的內容,這篇文章整理了常見的經典排序演算法,並對於演算法的實現和要點進行整理。

氣泡排序顧名思義,公升序排序的時候小的元素像氣泡一樣乙個乙個的浮上去,對於n個元素,通過兩層迴圈來完成排序,外層迴圈n-1次,下標用來記錄已排序的元素的位置,公升序的要求下每次獲取當次排序中的最小值,並將其排在已排序的最後乙個。內層迴圈使用臨位相比的方法來確定是否需要進行交換,在內層迴圈中保證外層迴圈的當前下標中儲存的是當前剩餘元素中的最小元素。

詳細的實現與要點解析可參看如下內容:

選擇排序和氣泡排序非常相像,都是使用比較和交換作為排序的重要手段,每次外層迴圈得到乙個未排序的最小值,將序列分為已排序和未排序兩種。但區別也非常清晰,氣泡排序的交換在內層迴圈進行,選擇排序的交換在外層進行,內層迴圈只需要獲取當次迴圈最小元素的下標。

詳細的實現與要點解析可參看如下內容:

插入排序在理解上可以參考打牌時的同花順的單手排序過程,插入只是演算法的乙個重要動作,另外還有乙個動作就是選擇,如果將插入排序理解為元素從1到n的乙個初始化過程,每次插入之後保證當前的序列是已排序的也沒有問題,但是這種情況需要而外的乙個o(n)的空間,相較於氣泡排序和選擇排序的交換,插入排序的特點在於後移和插入。首先將外層迴圈的當前元素儲存在乙個額外的變數之中,內層迴圈顯著的特點是在已排序的序列中進行迴圈,根據要插入的元素和已排序的元素進行比較,決定移位。然後在外層迴圈中進行插入。

詳細的實現與要點解析可參看如下內容:

希爾排序是在插入排序的基礎上進行的,增量遞減的插入排序改進是希爾演算法的核心內容,增量在演算法中被稱為增量,比如乙個待排序列有10個元素,增量遞減的思路可以進行自行定製,比如除2,首次增量為10/2=5,然後接下來為5/2=2,然後2/2=1,所以稱為增量遞減。

詳細的實現與要點解析可參看如下內容:

計數排序在理解上大概是比氣泡排序還要簡單的排序,它的做法就是根據待排序的內容生成一大塊連續的空間,能夠儲存待排序的最大值-最小值的範圍,然後巧妙的將值作為下標進行儲存,而該下標的元素中保持記錄重複的次數,然後輸出的時候根據順序進行輸出,有計數值的按照計數值進行輸出即可,有重複的根據計數值進行遞減。雖然此排序有時被成為桶排序或者箱排序,雖然可以將其理解為桶的個數最大情況下的個例,但是多少還是有些不同。

詳細的實現與要點解析可參看如下內容:

歸併排序在理解上的那點複雜性主要在於其遞迴方式的分而治之的拆分與合併。歸併在漢語中本身就含有合併的意義,實際上更準確的說,應該是拆分合併演算法,拆分至單個元素,這樣最小力度都是有序的,然後遞迴的合併就可以在有序的基礎上進行了,而有序狀況下的合併複雜度是很容易可以做到o(n)的,由於分層是可以達到對數級的效率,所以整體的複雜度為o(nlogn)。

詳細的實現與要點解析可參看如下內容:

快速排序乍一看很像歸併排序,但實際上這是由於兩者都是使用了分而治之的思路,所以在演算法上都有遞迴的實現。但是仔細看來二者還是有很多區別的。快速排序的核心在於分割槽演算法,分割槽演算法設定基準值,根據基準值將資料分為三部分:左側小於基準值序列、基準值、右側大於基準值的序列。層層遞迴即完成整體快排。

詳細的實現與要點解析可參看如下內容:

包括快排在內的經典排序演算法的實現都非常簡單,如果寫的簡潔一些的情況下,核心排序**往往只需數行,還是值得認真學習和總結一下的。

經典排序演算法總結

排序演算法是離散數學和資料結構學科最基本的演算法,雖然知道這些排序演算法的名字,但是一直沒有研究過它們的實現原理。現在把它們收集起來,並一一親自實現,來加深對排序演算法的理解。1,氣泡排序 最簡單的排序演算法,從第乙個元素開始比較相鄰元素大小,如果前邊元素大於後邊元素則交換位置,否則將下標移到下乙個...

經典排序演算法總結

插入排序 選擇排序 歸併排序 排序方法 平均情況 最好最差 空間複雜度 穩定性氣泡排序o n2 o n 2 o n o n o n2 o n 2 o 1 o 1 穩定快速排序o nlogn o nlog n o nlogn o nlog n o n2 o n 2 o nlogn o nlog n 不...

七種常見經典排序演算法總結 C

最近想複習下c 很久沒怎麼用了,畢業時的一些經典排序演算法也忘差不多了,所以剛好一起再學習一遍。除了冒泡 插入 選擇這幾個複雜度o n 2 的基本排序演算法,希爾 歸併 快速 堆排序,多多少少還有些晦澀難懂,幸好又大神dreamcatcher cx都總結成了 一步步很詳細,十分感謝。而且就時間複雜度...