黄视频网站在线免费观看-黄视频网站在线看-黄视频网站在线观看-黄视频网站免费看-黄视频网站免费观看-黄视频网站免费

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > Golang實現算法快速排序和歸并排序的比較

Golang實現算法快速排序和歸并排序的比較

來源:千鋒教育
發布人:xqq
時間: 2023-12-21 14:10:22 1703139022

Golang實現算法:快速排序和歸并排序的比較

在計算機科學中,排序是一種基本的算法問題。排序算法主要有兩類:比較排序和非比較排序。比較排序是通過比較元素的大小來排序的,而非比較排序則不是,常見的非比較排序有計數排序、桶排序和基數排序。而比較排序中,快速排序和歸并排序是兩種比較常見的排序算法。本文將比較這兩種算法的性能和實現。

一、快速排序

快速排序是典型的分治思想的體現,它的基本思想是:通過一次排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按照此方法對兩部分數據分別進行快速排序,整個過程遞歸進行,以此達到整個序列變成有序序列。

1. 算法步驟

快速排序的算法步驟如下:

- 挑選基準值:從數列中挑出一個元素作為基準值,稱為樞軸(pivot);

- 分割:重新排列序列,使得比樞軸小的元素在左邊,比樞軸大的元素在右邊。在這個分割結束之后,對于每個元素,它左邊的元素都比它小,右邊的元素都比它大;

- 遞歸排序子序列:通過遞歸排序左右兩個子序列,排序完成。

2. 代碼實現

Golang實現快速排序的代碼如下:

`go

func QuickSort(arr int, left, right int) {

if left >= right {

return

}

pivot := partition(arr, left, right)

QuickSort(arr, left, pivot-1)

QuickSort(arr, pivot+1, right)

}

func partition(arr int, left, right int) int {

pivot := arr

for left < right {

for left < right && arr >= pivot {

right--

}

arr = arr

for left < right && arr <= pivot {

left++

}

arr = arr

}

arr = pivot

return left

}

在實現上采用了遞歸的思想,每次選擇最左邊的數作為基準值,遍歷數組,將比基準值小的數放到左邊,比基準值大的數放到右邊,并返回基準值(樞軸)在數組中的位置,以便于對左右兩個子數組進行遞歸排序。如果使用golang內置sort包對數組進行排序,快排的代碼如下:`gofunc QuickSort(data Interface) {n := data.Len()quickSort(data, 0, n, maxDepth(n))}func quickSort(data Interface, a, b, maxDepth int) {for b-a > 12 {if maxDepth == 0 {heapSort(data, a, b)return}maxDepth--i, j := a+1, b-1if data.Less(j, i) {data.Swap(i, j)}if data.Less(j, i+1) {data.Swap(i+1, j)}if data.Less(i, i+1) {data.Swap(i, i+1)}p := ifor {for ; data.Less(i, p); i++ {}for ; j > p && !data.Less(p, j); j-- {}if i >= j {break}data.Swap(i, j)}data.Swap(p, j)if j-p > b-j {quickSort(data, a, j, maxDepth)a = j + 1} else {quickSort(data, j+1, b, maxDepth)b = j}}if b-a > 1 {for i := a + 1; i < b; i++ {for j := i; j > a && data.Less(j, j-1); j-- {data.Swap(j, j-1)}}}}

在Golang內置的sort包中,快排算法的效率極高,它通過減少遞歸的深度,以及處理小數組的方式來提高效率。

二、歸并排序

歸并排序也是一種分治的排序算法,它的基本思想是:將待排序序列分成若干個子序列,每個子序列都是有序的,然后合并子序列,使整個序列的數都有序。

1. 算法步驟

歸并排序的算法步驟如下:

- 拆分:將要排序的序列拆分成兩個子序列,拆分到序列只有一個元素時停止拆分;

- 排序:將每個子序列排序;

- 合并:將已經排好序的子序列合并成一個新的序列。

2. 代碼實現

Golang實現歸并排序的代碼如下:

`go

func MergeSort(arr int) int {

if len(arr) <= 1 {

return arr

}

mid := len(arr) / 2

left := MergeSort(arr)

right := MergeSort(arr)

return merge(left, right)

}

func merge(left, right int) int {

result := int{}

for len(left) > 0 && len(right) > 0 {

if left <= right {

result = append(result, left)

left = left

} else {

result = append(result, right)

right = right

}

}

if len(left) > 0 {

result = append(result, left...)

}

if len(right) > 0 {

result = append(result, right...)

}

return result

}

在實現上采用了遞歸的思想,將數組拆分成左右兩個子數組,然后對每個子數組進行遞歸排序。最后將已經排好序的左右兩個子數組進行合并。如果使用golang內置sort包對數組進行排序,歸并排序的代碼如下:`gofunc MergeSort(data Interface) {n := data.Len()if n < 2 {return}a := make(slice, n/2)b := make(slice, n-n/2)copy(a, data)copy(b, data)MergeSort(a)MergeSort(b)if a.Less(b) {copy(data, a)copy(data, b)return}for i, j, k := 0, 0, 0; k < n; k++ {if j >= len(b) || (i < len(a) && !a.Less(b)) {data = ai++} else {data = bj++}}}

在Golang內置的sort包中,歸并排序的算法效率相對比較低,但它具有穩定性,可以保證相同元素的順序不變。這也是它被廣泛使用的原因之一。

三、算法比較

快速排序和歸并排序都是分治思想的體現,它們的時間復雜度都為O(nlogn)。但是在最壞的情況下,快速排序的時間復雜度會退化到O(n^2),而歸并排序的時間復雜度則穩定在O(nlogn)。

另外,歸并排序需要額外的空間存儲子數組,而快速排序不需要額外的空間,它是原地排序的,所以在空間復雜度方面,快速排序優于歸并排序。但是這也使得快速排序不穩定,它不能保證相同元素的順序不變。

四、結論

在實際的應用中,快速排序和歸并排序各有優缺點,具體使用哪種算法需要根據實際情況進行選擇。如果需要對大量數據進行排序,且空間比較緊張,可以使用快速排序。如果要求排序穩定,可以使用歸并排序。如果既需要排序穩定,又不希望額外浪費太多空間,可以考慮使用其他算法,比如堆排序。

以上就是IT培訓機構千鋒教育提供的相關內容,如果您有web前端培訓鴻蒙開發培訓python培訓linux培訓,java培訓,UI設計培訓等需求,歡迎隨時聯系千鋒教育。

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
日韩中文字幕一区| 国产精品自拍在线| 九九精品久久| 免费一级片在线观看| 亚欧乱色一区二区三区| 国产成人精品影视| 99热热久久| 亚洲精品久久久中文字| 99久久精品费精品国产一区二区| 午夜激情视频在线播放| 欧美18性精品| 99热精品在线| 韩国三级香港三级日本三级| 一本伊大人香蕉高清在线观看| 欧美国产日韩在线| 黄视频网站在线免费观看| 国产成人欧美一区二区三区的| 在线观看导航| 久久99欧美| 国产视频一区二区在线观看| 色综合久久天天综合| 精品久久久久久免费影院| 黄视频网站在线看| 深夜做爰性大片中文| 亚洲天堂免费观看| 可以免费在线看黄的网站| 国产成人女人在线视频观看 | 91麻豆爱豆果冻天美星空| 国产91精品一区| 欧美激情一区二区三区视频| 九九热国产视频| 日韩男人天堂| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产成人精品影视| 精品国产一区二区三区久| 青青青草影院 | 日韩在线观看视频网站| 久久久成人影院| 99久久网站| 日韩欧美一及在线播放| 国产精品自拍在线观看| 日韩免费在线观看视频| 欧美国产日韩久久久| 国产激情视频在线观看| 国产网站免费| 国产一级生活片| 中文字幕一区二区三区 精品| 日日日夜夜操| 日韩专区亚洲综合久久| 四虎久久影院| 日韩欧美一二三区| 国产伦理精品| 韩国三级视频网站| 国产伦理精品| 国产美女在线一区二区三区| 成人影视在线播放| 久久福利影视| 91麻豆精品国产综合久久久| 国产高清在线精品一区二区| 欧美大片毛片aaa免费看| 国产成人精品综合在线| 99久久精品国产麻豆| 免费的黄视频| 黄视频网站在线免费观看| 国产极品精频在线观看| 成人免费观看视频| 99久久精品国产片| 午夜精品国产自在现线拍| 久久精品免视看国产明星| 国产韩国精品一区二区三区| 亚洲女初尝黑人巨高清在线观看| 一级女性大黄生活片免费| 欧美日本免费| 精品国产香蕉伊思人在线又爽又黄| 日本在线www| 你懂的福利视频| a级毛片免费观看网站| 日韩欧美一及在线播放| 色综合久久天天综线观看| 91麻豆精品国产片在线观看| 日本伦理片网站| 精品国产一区二区三区久久久狼| 四虎影视库| 天天做人人爱夜夜爽2020| 天天做日日干| 成人免费高清视频| 欧美日本免费| 久久99中文字幕| 成人影院一区二区三区| 精品视频在线观看免费| 精品久久久久久免费影院| 日韩免费片| 日韩一级黄色片| 久草免费在线观看| 国产麻豆精品| 国产a毛片| 欧美a免费| 久久99中文字幕久久| 日韩中文字幕在线亚洲一区| 成人高清视频在线观看| 欧美大片毛片aaa免费看| 国产视频久久久| 韩国毛片免费大片| 免费的黄色小视频| 亚洲精品久久久中文字| 欧美国产日韩一区二区三区| 国产网站免费视频| 精品国产一区二区三区精东影业 | 一级片片| 欧美激情一区二区三区在线 | 青青久在线视频| 你懂的在线观看视频| 免费国产在线观看不卡| 在线观看导航| 国产视频久久久| 国产伦精品一区二区三区在线观看| 精品国产亚洲人成在线| 国产精品1024在线永久免费| 国产伦久视频免费观看视频| 色综合久久天天综线观看| 国产成人欧美一区二区三区的| 黄色福利| 日韩一级黄色| 日韩一级黄色| 色综合久久天天综线观看| 免费毛片播放| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 精品国产一区二区三区精东影业 | 高清一级做a爱过程不卡视频| 午夜家庭影院| 精品国产一区二区三区国产馆| 成人免费观看视频| 精品国产一区二区三区久 | 国产精品免费久久| 黄视频网站在线免费观看| 国产91精品系列在线观看| 四虎影视精品永久免费网站 | 国产伦精品一区三区视频| 成人高清视频在线观看| 99久久精品国产国产毛片| 一本伊大人香蕉高清在线观看| 日本伦理片网站| 美女被草网站| 精品国产亚洲人成在线| 91麻豆精品国产片在线观看| 日本在线不卡免费视频一区| 久久国产精品永久免费网站| 九九久久99综合一区二区| 国产亚洲精品aaa大片| 亚洲精品中文字幕久久久久久| 国产麻豆精品| 亚洲第一色在线| 国产原创中文字幕| 在线观看成人网 | 亚洲精品久久久中文字| 欧美大片一区| 欧美另类videosbestsex| 欧美激情一区二区三区视频 | 亚洲第一色在线| 日本在线播放一区| 国产一区二区精品久| 亚洲精品中文一区不卡| 欧美激情一区二区三区在线| 午夜久久网| 国产91精品露脸国语对白| 成人免费观看的视频黄页| 韩国三级一区| 国产福利免费视频| 99久久精品国产高清一区二区| 九九久久国产精品大片| 亚洲精品久久玖玖玖玖| 99色精品| 青青青草视频在线观看| 尤物视频网站在线| 黄色免费网站在线| 欧美a免费| 日本伦理片网站| 国产国语对白一级毛片| 久久国产精品只做精品| 精品视频在线观看免费| 亚洲精品影院| 国产一区二区精品久久91| 亚欧成人乱码一区二区| 久久精品欧美一区二区| 麻豆网站在线免费观看| 999久久狠狠免费精品| 99久久精品国产国产毛片| 亚洲 激情| 欧美日本免费| 青青青草影院| 精品毛片视频| 久久久久久久久综合影视网| 亚洲精品久久久中文字| 黄色免费三级| 成人在免费观看视频国产| 91麻豆国产| 久久国产精品只做精品| 99久久视频| 国产不卡在线看| 欧美大片a一级毛片视频|