中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang怎么實現常見排序算法

發布時間:2022-05-18 13:33:11 來源:億速云 閱讀:206 作者:iii 欄目:開發技術

這篇文章主要介紹“Golang怎么實現常見排序算法”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Golang怎么實現常見排序算法”文章能幫助大家解決問題。

五種基礎排序算法對比

Golang怎么實現常見排序算法

五種基礎排序算法對比

1、冒泡排序

算法描述

  • 比較相鄰的元素。如果第一個比第二個大,就交換它們兩個。

  • 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對,這樣在最后的元素應該會是最大的數。

  • 針對所有的元素重復以上的步驟,除了最后一個。

  • 重復步驟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
}

2、選擇排序

算法描述

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
}

3、插入排序

算法描述

一般來說,插入排序都采用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
}

4、快速排序

算法描述

快速排序的基本思想:通過一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。

  • 從數列中挑出一個元素,稱為 “基準”(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怎么實現常見排序算法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正蓝旗| 和硕县| 旬邑县| 霸州市| 和龙市| 齐河县| 孟津县| 湘潭市| 阿荣旗| 漾濞| 宜宾市| 湖南省| 奉贤区| 崇文区| 微山县| 麦盖提县| 巫溪县| 吉林省| 宜丰县| 钟山县| 达拉特旗| 桃江县| 乐山市| 彝良县| 万州区| 南部县| 竹山县| 建宁县| 赣榆县| 肃南| 长子县| 关岭| 青川县| 双鸭山市| 维西| 申扎县| 新田县| 佛学| 仁寿县| 苏尼特右旗| 海阳市|