成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

常見排序算法的Golang 實現

開發 前端
現在的面試真的是越來越卷了,算法已經成為了面試過程中必不可少的一個環節,你如果想進稍微好一點的公司,「算法是必不可少的一個環節」。

前言

現在的面試真的是越來越卷了,算法已經成為了面試過程中必不可少的一個環節,你如果想進稍微好一點的公司,「算法是必不可少的一個環節」。那么如何學習算法呢?很多同學的第一反應肯定是去letcode上刷題,首先我并不反對刷題的方式,但是對于一個沒有專門學習過算法的同學來說,刷題大部分是沒什么思路的,花一個多小時暴力破解一道題意義也不大,事后看看別人比較好的解法大概率也記不住,所以我覺得「專門針對算法進行一些簡單的訓練」是很有必要的,正好我自己最近也在學習,同時把學習成果同步更新在公眾號上,可能會更很多期,希望能幫助到你。另外最近很多同學也都在學習go,所以我就用go代碼演示算法。今天咱們閑話不用多說,就從最簡單的開始。

五種基礎排序算法對比

五種基礎排序算法對比

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
}
責任編輯:姜華 來源: 程序員小飯
相關推薦

2022-11-01 18:29:25

Go語言排序算法

2017-11-22 14:20:07

前端JavaScript排序算法

2024-08-30 14:34:00

2023-12-04 07:49:06

選擇排序排序算法

2021-02-22 07:29:07

算法初級排序

2021-02-26 05:29:11

排序算法數組

2011-02-17 09:11:40

JavaScript算法

2020-05-08 11:13:28

Python數據技術

2016-09-30 14:23:16

數據結構算法八大排序算法

2021-11-10 09:17:18

程序員排序算法搜索算法

2023-02-09 07:39:01

2021-09-30 07:57:13

排序算法面試

2021-09-04 23:40:53

算法程序員前端

2022-09-24 09:03:55

前端單元測試冒泡排序

2021-03-04 07:24:28

排序算法優化

2009-11-17 11:06:37

PHP排序

2012-06-27 15:33:30

Java排序算法

2015-10-08 09:08:50

Python實現

2009-08-19 09:42:34

F#并行排序算法

2023-05-08 07:55:05

快速排序Go 語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91在线精品播放 | 欧美性久久久 | 超碰在线人人 | 国产福利在线 | 成人免费视频网站在线看 | 国产内谢 | 日韩精品中文字幕一区二区三区 | 日韩精品一区二区三区中文字幕 | 天天操夜夜看 | 久夜精品 | 精品久久久久一区 | 激情网站 | 北条麻妃一区二区三区在线视频 | 国产精品国产成人国产三级 | 国产永久免费 | 国产免费一级一级 | 一区二区三区视频 | 夜夜操天天干 | 欧美精品福利 | 黄色精品| 国产精品视频一区二区三区 | 亚洲激情综合网 | 成人福利在线视频 | 亚洲欧美日韩在线不卡 | 精品国产高清一区二区三区 | 国产精品v| 成人在线精品视频 | 亚洲第一区国产精品 | 欧美国产日韩在线观看 | 日韩成人在线免费观看 | 久久久精品日本 | 精品国产免费一区二区三区演员表 | 国产精品婷婷 | 一区二区三区视频在线 | 国产激情视频在线免费观看 | 欧美一区中文字幕 | 久久久av中文字幕 | 久久久久久久久久久久91 | 国产91 在线播放 | 99久久精品一区二区毛片吞精 | 日韩成人免费视频 |