您好,登錄后才能下訂單哦!
這篇文章主要介紹“Golang怎么實現常見排序算法”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Golang怎么實現常見排序算法”文章能幫助大家解決問題。
五種基礎排序算法對比
算法描述
比較相鄰的元素。如果第一個比第二個大,就交換它們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對,這樣在最后的元素應該會是最大的數。
針對所有的元素重復以上的步驟,除了最后一個。
重復步驟1~3,直到排序完成。
代碼演示
func bubbleSort(arr []int) []int { if len(arr) <= 1 { return arr } for e := len(arr) - 1; e > 0; e-- { for i := 0; i < e; i++ { if arr[i] > arr[i+1] { Swap(arr, i, i+1) //交換元素 } } } return arr } func Swap(arr []int, i, j int) []int { temp := arr[j] arr[j] = arr[i] arr[i] = temp return arr }
算法描述
n個記錄的直接選擇排序可經過n-1趟直接選擇排序得到有序結果。具體算法描述如下:
將假想墻放置在數字列表最左側,墻的左側為已排序子列表,右側為未排序子列表。
找出(選擇)未排序子列表中的最小(或最大)元素。
把選擇的元素與未排序列表中第一個元素進行交換。
將假想墻向右移動一個位置。
反復執行 2 至 4 步操作,直至整個數字列表排序完成(需要 n - 1 輪)。
代碼演示
func selectSort(arr []int) []int { if len(arr) <= 1 { return arr } for i := 0; i < len(arr); i++ { var minIndex int = i for j := i + 1; j < len(arr); j++ { if arr[j] < arr[minIndex] { minIndex = j } } arr = Swap(arr, i, minIndex) } return arr } func Swap(arr []int, i, j int) []int { temp := arr[j] arr[j] = arr[i] arr[i] = temp return arr }
算法描述
一般來說,插入排序都采用in-place在數組上實現。具體算法描述如下:
從第一個元素開始,該元素可以認為已經被排序。
取出下一個元素,在已經排序的元素序列中從后向前掃描。
如果該元素(已排序)大于新元素,將該元素移到下一位置。
重復步驟3,直到找到已排序的元素小于或者等于新元素的位置;將新元素插入到該位置后;
重復步驟2~5。
代碼實現
func insertSort(arr []int) []int { if len(arr) <= 1 { return arr } for i := 1; i < len(arr); i++ { for j := i - 1; j >= 0; j-- { if arr[j] > arr[j+1] { Swap(arr, j, j+1) } } } return arr } func Swap(arr []int, i, j int) []int { temp := arr[j] arr[j] = arr[i] arr[i] = temp return arr }
算法描述
快速排序的基本思想:通過一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。
從數列中挑出一個元素,稱為 “基準”(pivot)。
重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的后面(相同的數可以到任一邊)。在這個分區退出之后,該基準就處于數列的中間位置。這個稱為分區(partition)操作。
遞歸地(recursive)把小于基準值元素的子數列和大于基準值元素的子數列排序。
代碼實現
//快速排序 func quickSort(arr []int) []int { if len(arr) <= 1 { return arr } middle := arr[0] var left []int var right []int for i := 1; i < len(arr); i++ { if arr[i] > middle { right = append(right, arr[i]) } else { left = append(left, arr[i]) } } middle_s := []int{middle} left = quickSort(left) right = quickSort(right) arr = append(append(left, middle_s...), right...) return arr }
關于“Golang怎么實現常見排序算法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。