侧边栏壁纸
博主头像
ToDream博主等级

行动起来,活在当下

  • 累计撰写 13 篇文章
  • 累计创建 5 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

快速排序

X
X
2023-12-13 / 0 评论 / 0 点赞 / 17 阅读 / 3077 字

快速排序

package main

import "fmt"

func main() {
	// 需要进行排序的数组
	nums := []int{2, 45, 1, 5, 76, 8, 3, 1, 2, 3}
	// 进行快速排序
	quickSort(nums, false)
	// 在控制台打印
	fmt.Println(nums)
}

func quickSort(arr []int, reverse bool) {
    if len(arr) <= 1 {
       return // 如果切片长度小于等于1,则已经是有序的,直接返回
    }
    pivot := arr[len(arr)-1] // 选择最后一个元素作为基准点
    left, right := make([]int, 0), make([]int, 0)
    // 将切片分割成两个子切片,一个存放比基准点小的元素,一个存放比基准点大的元素
    for i := 0; i < len(arr)-1; i++ {
       // 定义一个可以用于控制 正序 还是 倒序 变量
       var sortValue bool
       if reverse {
          sortValue = arr[i] < pivot
       } else {
          sortValue = arr[i] > pivot
       }
       if sortValue {
          left = append(left, arr[i])
       } else {
          right = append(right, arr[i])
       }
    }
    // 递归调用快速排序对左右两个子切片进行排序
    quickSort(left, reverse)
    quickSort(right, reverse)
    // 合并左侧已排序的切片、基准点和右侧已排序的切片,得到最终排序结果
    copy(arr, append(append(left, pivot), right...))
}
0

评论区