常见排序算法,快速排序,归并排序,选择排序,冒泡排序代码记录
完整代码
- 新建文件
- 复制粘贴
- 运行代码
效果截图
测试数据
nums := []int{3, 1, 2, 5, 7, 8, 5, 4, 6, 9, 2, 6, 8, 3}
运行结果

代码
package main
import (
	"log"
)
func main() {
	nums := []int{3, 1, 2, 5, 7, 8, 5, 4, 6, 9, 2, 6, 8, 3}
	log.Println("测试", nums)
	log.Println("归并", mergeSort(nums))
	quicksort(nums, 0, len(nums)-1)
	log.Println("快排", nums)
	nums = []int{3, 1, 2, 5, 7, 8, 5, 4, 6, 9, 2, 6, 8, 3}
	bubberSort(nums)
	log.Println("冒泡", nums)
	nums = []int{3, 1, 2, 5, 7, 8, 5, 4, 6, 9, 2, 6, 8, 3}
	selectSort(nums)
	log.Println("选择", nums)
}
// 快速排序
func quicksort(nums []int, left, right int) {
	if left >= right {
		return
	}
	l, r := left, right
	// 第一个作为分解值
	flag := nums[left]
	for l < r {
		for nums[r] > flag && l < r {
			r--
		}
		// 挪一挪
		for nums[l] <= flag && l < r {
			l++
		}
		nums[l], nums[r] = nums[r], nums[l]
	}
	nums[left], nums[l] = nums[l], nums[left]
	quicksort(nums, left, l-1)
	quicksort(nums, l+1, right)
}
// 归并排序
func mergeSort(nums []int) []int {
	if len(nums) <= 1 {
		return nums
	}
	mid := len(nums) / 2
	left := mergeSort(nums[:mid])
	right := mergeSort(nums[mid:])
	return merge(left, right)
}
func merge(left, right []int) []int {
	ret := make([]int, 0, len(left)+len(right))
	i, j := 0, 0
	for i < len(left) && j < len(right) {
		if left[i] > right[j] {
			ret = append(ret, right[j])
			j++
		} else {
			ret = append(ret, left[i])
			i++
		}
	}
	ret = append(ret, left[i:]...)
	ret = append(ret, right[j:]...)
	return ret
}
// 冒泡排序
func bubberSort(nums []int) {
	for i := 0; i < len(nums)-1; i++ {
		for j := 0; j < len(nums)-1-i; j++ {
			if nums[j] > nums[j+1] {
				nums[j], nums[j+1] = nums[j+1], nums[j]
			}
		}
	}
}
// 选择排序
func selectSort(nums []int) {
	for i := 0; i < len(nums)-1; i++ {
		for j := i; j < len(nums); j++ {
			if nums[i] > nums[j] {
				nums[i], nums[j] = nums[j], nums[i]
			}
		}
	}
}
