每次都找一个枢纽(下面代码用数组的最后一个),将它放到正确的位置,再把这个枢纽位置的俩边进行递归。
func quickSort(arr []int, l, r int) { if l < r {
mid := partionSort(arr, l, r)
quickSort(arr, l, mid[0]-1)
quickSort(arr, mid[0]+1, r)
}
}func partionSort(arr []int, l, r int) [2]int {
// 快速排序
target := arr[r]
less := l - 1 // 作为小区间
more := r + 1 // 作为大区间
index := l
for index < more {
if arr[index] < target { // 如果数比目标数小
less = less + 1
swap(arr, less, index)
index = index + 1
} else if arr[index] > target { // 如果数是比目标数大
more = more - 1
swap(arr, more, index)
} else { // 等于
index = index + 1
}
}
return [2]int{less + 1, more}
}func swap(arr []int, l, r int) {
// 交换数组中的俩个数
if l == r || l < 0 || r < 0 || l >= len(arr) || r >= len(arr) {
return
}
arr[l], arr[r] = arr[r], arr[l]
}
【go|快速排序】
推荐阅读
- 人工智能|干货!人体姿态估计与运动预测
- 分析COMP122 The Caesar Cipher
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)
- 笔记|C语言数据结构——二叉树的顺序存储和二叉树的遍历
- C语言学习(bit)|16.C语言进阶——深度剖析数据在内存中的存储
- Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法
- 数据结构与算法|【算法】力扣第 266场周赛
- 数据结构和算法|LeetCode 的正确使用方式
- leetcode|今天开始记录自己的力扣之路
- 人工智能|【机器学习】深度盘点(详细介绍 Python 中的 7 种交叉验证方法!)