Go實現氣泡排序和快速排序
冒泡和快速排序都屬於交換類排序,所謂交換排序是指藉助資料元素之間互相交換進行排序的方法。
氣泡排序法 氣泡排序法是一種最簡單的交換類排序方法,它是通過相鄰資料的交換逐步將線性表變成有序。
氣泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。
即在第一趟:首先比較第 1 個和第 2 個數,將小數放前,大數放後。然後比較第 2 個數和第 3 個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。
在第二趟:仍從第一對數開始比較(因為可能由於第 2 個數和第 3 個數的交換,使得第 1 個數不再小於第 2 個數),將小數放前,大數放後,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),
第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。如此下去,重複以上過程,直至最終完成排序。
由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上升,所以稱作氣泡排序。
func BubbleSort(values []int) {
for i := 0; i < len(values)-1; i++ {
for j := 0; j < len(values)-i-1; j++ {
if values[j] > values[j+1] { //如果想換成降序排列,把">"號換成"<"即可
values[j], values[j+1] = values[j+1], values[j]
}
}
}
}
快速排序法 快速排序(Quicksort)是對氣泡排序的一種改進。由 C. A. R. Hoare 在 1962 年提出。它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。
設要排序的陣列是 A[0]……A[N-1],首先任意選取一個資料(通常選用第一個資料)作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動。
一趟快速排序的演算法是: 1)設定兩個變數 i、j,排序開始的時候:i=0,j=N-1; 2)以第一個陣列元素作為關鍵資料,賦值給 key,即 key=A[0]; 3)從 j 開始向前搜尋,即由後開始向前搜尋(j -- ),找到第一個小於 key 的值 A[j],A[i] 與 A[j] 交換; 4)從 i 開始向後搜尋,即由前開始向後搜尋(i ++ ),找到第一個大於 key 的 A[i],A[i] 與 A[j] 交換; 5)重複第 3、4、5 步,直到 I=J; (3,4 步是在程式中沒找到時候 j=j-1,i=i+1,直至找到為止。找到並交換的時候 i, j 指標位置不變。另外當 i=j 這過程一定正好是 i+ 或 j-完成的最後令迴圈結束。)
func quickSort(values []int,left,right int){
temp:=values[left]
p:=left
i,j:=left,right
for i<=j{
for j>=p && values[j]>=temp{
j--
}
if j>=p{
values[p]=values[j]
p=j
}
for i<=p && values[i]<=temp{
i++
}
if i<=p{
values[p]=values[i]
p=i
}
}
values[p]=temp
if p-left>1{
quickSort(values,left,p-1)
}
if right-p>1{
quickSort(values,p+1,right)
}
}
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- go 實現氣泡排序和插入排序Go排序
- 排序:氣泡排序&快速排序排序
- 用JS實現氣泡排序和插入排序JS排序
- python實現氣泡排序、插入排序以及快速排序演算法Python排序演算法
- 用go實現簡單的氣泡排序Go排序
- Java實現氣泡排序Java排序
- Python實現氣泡排序Python排序
- 排序——氣泡排序排序
- 選擇排序和氣泡排序排序
- 【C語言】氣泡排序與快速排序C語言排序
- 氣泡排序、歸併排序與快速排序比較排序
- php實現 氣泡排序,插入排序,選擇排序PHP排序
- Java實現氣泡排序和插入排序演算法Java排序演算法
- ForkJoin和氣泡排序組合實現的歸併排序排序
- Golang實現氣泡排序法Golang排序
- 【JS面試向】選擇排序、桶排序、氣泡排序和快速排序簡介JS面試排序
- 9. 氣泡排序,以及如何優化氣泡排序,氣泡排序屬於插入排序排序優化
- 氣泡排序排序
- 排序演算法 - 氣泡排序和選擇排序排序演算法
- 氣泡排序和選擇排序詳解排序
- 氣泡排序和選擇排序流程圖排序流程圖
- PHP 常見4種排序 氣泡排序、選擇排序、插入排序、快速排序PHP排序
- java氣泡排序演算法實現Java排序演算法
- GO 實現快速排序Go排序
- Python 氣泡排序Python排序
- 容器氣泡排序排序
- 氣泡排序法排序
- 氣泡排序(Java)排序Java
- 氣泡排序1排序
- 氣泡排序-fusha排序
- 氣泡排序演示排序
- Shell氣泡排序排序
- d氣泡排序排序
- js氣泡排序JS排序
- JavaScript氣泡排序JavaScript排序
- 氣泡排序與選擇排序排序
- 【排序】氣泡排序(待補充)排序
- 排序演算法--氣泡排序排序演算法