微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

10天光速入门go语言 常见排序算法

转载请注明来源"老男孩IT教育"
来源网址:https://www.sholdboyedu.com/new/638.html
本文介绍了Go语言版经典的排序算法–快速排序、归并排序和堆排序。下面老男孩IT教育帮你解析一下。

排序算法

快速排序

func quickSort(data []int) {

if len(data) <= 1 {

return

}

base := data[0]

l, r := 0, len(data)-1

for i := 1; i <= r; {

if data[i] > base {

data[i], data[r] = data[r], data[i]

r–

} else {

data[i], data[l] = data[l], data[i]

L++

i++

}

}

quickSort(data[:l])

quickSort(data[l+1:])

}

func main() {

s := make([]int, 0, 16)

for i := 0; i < 16; i++ {

s = append(s, rand.Intn(100))

}

fmt.Println(s)

quickSort(s)

fmt.Println(s)

}

归并排序

func mergeSort(data []int) []int {

length := len(data)

if length <= 1 {

return data

}

num := length / 2

left := mergeSort(data[:num])

right := mergeSort(data[num:])

return merge(left, right)

}

func merge(left, right []int) (result []int) {

l, r := 0, 0

for l < len(left) && r < len(right) {

if left[l] < right[r] {

result = append(result, left[l])

L++

} else {

result = append(result, right[r])

r++

}

}

result = append(result, left[l:]…)

result = append(result, right[r:]…)

return

}

func main() {

s := make([]int, 0, 16)

for i := 0; i < 16; i++ {

s = append(s, rand.Intn(100))

}

fmt.Println(s)

s = mergeSort(s)

fmt.Println(s)

}

堆排序

copy

func heapSort(array []int) {

m := len(array)

s := m / 2

for i := s; i > -1; i-- {

heap(array, i, m-1)

}

for i := m - 1; i > 0; i-- {

array[i], array[0] = array[0], array[i]

heap(array, 0, i-1)

}

}

func heap(array []int, i, end int) {

l := 2*i + 1

if l > end {

return

}

n := l

r := 2*i + 2

if r <= end && array[r] > array[l] {

n = r

}

if array[i] > array[n] {

return

}

array[n], array[i] = array[i], array[n]

heap(array, n, end)

}

func main() {

s := make([]int, 0, 16)

for i := 0; i < 16; i++ {

s = append(s, rand.Intn(100))

}

fmt.Println(s)

heapSort(s)

fmt.Println(s)

}

试听课程热线:18721913912 QQ裙:594235772

新猿教育: Python linux GO 网络安全、脱产、网络课程

实战教学,拒绝纸上谈兵。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐