<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
排序演演算法是在生活中隨處可見,也是演演算法基礎,因為其實現程式碼較短,應用較常見。所以在面試中經常會問到排序演演算法及其相關的問題,可以說是每個程式設計師都必須得掌握的了。為了方便大家學習,花了一天的時間用Go語言實現一下常用的演演算法且整理了一下,如有需要可以參考。
思路:從前往後對相鄰的兩個元素依次進行比較,讓較大的數往下沉,較小的網上冒,即每當兩個相鄰的元素比較後發現他們的排序要求相反時,就將它們互換。
時間複雜度:O(N^2)
空間複雜度:O(1)
func main() { fmt.Println(bubbleSort([]int{2, 4, 1, 6, 3})) } func bubbleSort(list []int) []int { lenth := len(list) for i := 0; i <= lenth; i++ {//迴圈對比的輪數 exchange := false for j := 1; j < lenth-i; j++ {//當前輪相鄰元素迴圈對比 if list[j-1] > list[j]{//如果前邊的大於後邊的 list[j-1], list[j] = list[j], list[j-1]//交換資料 exchange = true } } if !exchange { break } } return list }
思路:以一個基準數將陣列拆分為兩組,一邊大於這個數,一邊小於這個數,再最左右兩個組重複這個過程,直到各個區域只有一個數。
時間複雜度:O(nlogn)
空間複雜度:O(1)
func quickSort(list []int) []int { length := len(list) if length <= 1 { return list } //基準值 base := list[0] left := make([]int, 0) right := make([]int, 0) for i := 1; i < length; i++ { if list[i] > base { right = append(right, list[i]) } else { left = append(left, list[i]) } } left, right = quickSort(left), quickSort(right) return append(append(left, base),right...) }
思路:首先找到陣列中的最小元素,然後將這個最小元素和陣列的第一個元素交換位置,如果第一個元素就是最小元素,就和自己交換位置;再次,在剩下的元素中找到最小元素和陣列中的第二個元素交換位置,如此往復,直到將整個陣列排序,一句話總結就是,不斷在剩餘元素中找最小元素。
時間複雜度:O(n^2)
空間複雜度:O(1)
func selectSort(list []int) []int { length := len(list) for i := 0; i < length; i++ { minIndex := i //每次迴圈找出i+1到最後一個元素區間的最小值,然後當前元素和當前最小值比較 for j := i + 1; j < length; j++ { if list[j] < list[minIndex] { minIndex = j } } if i != minIndex { list[i], list[minIndex] = list[minIndex], list[i] } } return list }
思路:與選擇排序一樣,當前索引左邊的所有元素都是有序的,但是他們的最終位置還不確定,為了給更小的元素騰出空間,他們可能會被移動,但是當索引到達陣列的末端,陣列排序就完成了。
時間複雜度:O(N^2)
空間複雜度:O(1)
func insertSort(list []int) []int { length := len(list) for i := 0; i < length; i++ { for j := i; j > 0; j-- { if list[j] > list[j-1] { break } list[j], list[j-1] = list[j-1], list[j] } } return list }
排序思路演演算法幾乎一樣。 暫時就介紹這幾種常用的也是面試中經常問道的排序演演算法。
到此這篇關於Go語言實現常用排序演演算法的範例程式碼的文章就介紹到這了,更多相關Go語言排序演演算法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45