1. 排序演算法匯總

2. 排序演算法復雜度

3. 演算法實作
3.1. 冒泡排序:BubbleSort
3.1.1 冒泡排序的原理:
- 1.對于一個陣列,冒泡排序演算法會比較相鄰的兩項的大小,并進行換,
- 2.對每一對相鄰的元素做同樣的調整,如:第一個和第二個,第二和第三個,第三個和第四個等等,以此類推,這樣下來,最后的素會是最大的,
- 3.重復以上步驟,如果有n個元素,則第一次回圈進行n-1次,第二回圈進行n-2次,…………,第n-j次回圈過后,會按大小順序排出j較大的數,
- 4.持續以上的步驟,直到沒有任何一堆數字需要比較,
3.1.2. 界面效果

3.2. 雙向冒泡排序:DoubleBubbleSort
3.2.1. 雙向冒泡排序的原理:
- 先對陣列從左到右進行冒泡排序(升序),則最大的元素去到最右端
- 再對陣列從右到左進行冒泡排序(降序),則最小的元素去到最左端
- 以此類推,依次改變冒泡的方向,并不斷縮小未排序元素的范圍,直到最后一個元素結束
3.2.2. 界面效果

3.3. 插入排序:InsertSort
3.3.1. 插入排序的原理:
插入排序的作業方式像許多人排序一手撲克牌,開始時,我們的左手為空并且桌子上的牌面向下,然后,我們每次從桌子上拿走一張牌并將它插入左手中正確的位置,為了找到一張牌的正確位置,我們從右到左將它與已在手中的每張牌進行比較,拿在左手上的牌總是排序好的,原來這些牌是桌子上牌堆中頂部的牌
3.3.2 界面效果

3.4. 選擇排序:DoubleBubbleSort
3.4.1. 選擇排序的原理:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,
再從剩余未排序元素中繼續尋找最小(大)元素,然后放到已排序序列的末尾,
重復第二步,直到所有元素均排序完畢,
3.4.2. 界面效果

3.5. 基數排序:RadixSort LSD
3.5.1 基數排序的原理:
屬于“分配式排序”(distributionsort),基數排序法又稱“桶子法”(bucketsort)或binsort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些“桶”中,藉以達到排序的作用,基數排序法是屬于穩定性的排序,其時間復雜度為O(nlog?m),其中r為所采取的基數,而m為堆數,在某些時候,基數排序法的效率高于其它的比較性排序法,同時基數排序分最高位優先"(MSD)法和最低位優先"(LSD)法,
3.5.2. 代碼效果

3.6. 快速排序:QuickSort
3.6.1. 快速排序的原理:
快速排序由于排序效率在同為O(N*logN)的幾種排序方法中效率較高,因此經常被采用,再加上快速排序思想----分治法也確實實用
快速排序是C.R.A.Hoare于1962年提出的一種劃分交換排序,它采用了一種分治的策略,通常稱其為分治法(Divide-and-ConquerMethod),
該方法的基本思想是:
1.先從數列中取出一個數作為基準數,
2.磁區程序,將比這個數大的數全放到它的右邊,小于或等于它的數全放到它的左邊,
3.再對左右區間重復第二步,直到各區間只有一個數,
雖然快速排序稱為分治法,但分治法這三個字顯然無法很好的概括快速排序的全部步驟,因此我的對快速排序作了進一步的說明:挖坑填數+分治法:
3.6.2. 界面效果

3.7.歸并排序:MergeSort
3.7.1. 歸并排序原理
- 申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合并后的序列
- 設定兩個指標,最初位置分別為兩個已經排序序列的起始位置
- 比較兩個指標所指向的元素,選擇相對小的元素放入到合并空間,并移動指標到下一位置
重復步驟3直到某一指標超出序列尾
將另一序列剩下的所有元素直接復制到合并序列尾
3.7.2. 效果

3.8. 希爾排序:ShellSort
3.8.1. 希爾排序的原理:
希爾排序是將待排序的陣列元素 按下標的一定增量分組 ,分成多個子序列,然后對各個子序列進行直接插入排序演算法排序;然后依次縮減增量再進行排序,直到增量為1時,進行最后一次直接插入排序,排序結束,
3.8.2. 界面效果

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/382876.html
標籤:其他
上一篇:二叉樹的遞回套路——完全二叉樹
下一篇:動態記憶體分配
