排序算法
列举了十大排序算法
- 冒泡排序
- 插入排序
- 选择排序
- 希尔排序
- 堆排序
- 归并排序
- 计数排序
- 桶排序
- 基数排序
![算法复杂度](https://i-blog.csdnimg.cn/blog_migrate/e42f7381a4eed9c0aee45f5084b9079b.png)
Golang 代码实现
package main
import (
"fmt"
"sort"
)
func main() {
// nums := []int{2, 6, 4, 8, 10, 9, 15}
nums := []int{3, 2, 5, 4, 8, 9, 6, 7}
// nums := []int{2, 1}
// fmt.Println(findUnsortedSubarray(nums))
radixSort(nums, 1)
}
// 堆排序
func headSort(nums []int) {
m := len(nums)
s := m / 2
// 调整堆
for i := s; i > -1; i-- {
heapify(nums, i, m-1)
}
// 把堆顶和最后一个元素交换,再调整堆
for i := m - 1; i > 0; i-- {
nums[i], nums[0] = nums[0], nums[i]
heapify(nums, 0, i-1)
}
}
func heapify(nums []int, i, end int) {
l := 2*i + 1
if l > end {
return
}
n := l
r := 2*i + 2
if r <= end && nums[r] > nums[l] {
n = r
}
if nums[i] > nums[n] {
return
}
nums[n], nums[i] = nums[i], nums[n]
// 递归调整子节点
heapify(nums, n, end)
}
// 快速排序 (挖坑法)
func quickSort(nums []int, left, right int) {
if left < right {
partitionIndex := partition(nums, left, right)
quickSort(nums