技术文摘
算法基础之快速排序的图解及 Go 代码实现
2024-12-31 02:49:16 小编
算法基础之快速排序的图解及 Go 代码实现
在算法的世界中,快速排序是一种高效且常用的排序算法。它采用了分治的策略,能够在平均情况下以 O(n log n) 的时间复杂度对数组进行排序。
让我们通过图解来理解快速排序的工作原理。假设我们有一个待排序的数组:[5, 1, 9, 3, 7, 2]。
选择一个基准元素,通常选择数组的第一个元素。然后,将数组分为小于基准和大于基准的两部分。
以 5 为基准,从数组的第二个元素开始比较。小于 5 的元素放在左边,大于 5 的元素放在右边。第一轮排序后,数组可能变为:[2, 1, 3, 5, 7, 9]。
接下来,对左右两部分分别重复上述步骤,直到整个数组有序。
下面是用 Go 语言实现快速排序的代码:
package main
import "fmt"
// 交换函数
func swap(arr []int, i int, j int) {
arr[i], arr[j] = arr[j], arr[i]
}
// 划分函数
func partition(arr []int, low int, high int) int {
pivot := arr[high]
i := (low - 1)
for j := low; j <= high-1; j++ {
if arr[j] <= pivot {
i++
swap(arr, i, j)
}
}
swap(arr, i+1, high)
return (i + 1)
}
// 快速排序函数
func quickSort(arr []int, low int, high int) {
if low < high {
pi := partition(arr, low, high)
quickSort(arr, low, pi-1)
quickSort(arr, pi+1, high)
}
}
// 打印数组函数
func printArray(arr []int, size int) {
for i := 0; i < size; i++ {
fmt.Printf("%d ", arr[i])
}
fmt.Println()
}
func main() {
arr := []int{10, 7, 8, 9, 1, 5}
n := len(arr)
fmt.Println("排序前的数组为: ")
printArray(arr, n)
quickSort(arr, 0, n-1)
fmt.Println("排序后的数组为: ")
printArray(arr, n)
}
快速排序在实际应用中表现出色,尤其对于大型数据集。它的平均性能优秀,但在最坏情况下,时间复杂度可能退化为 O(n^2)。不过,通过合理选择基准元素,可以有效地避免最坏情况的发生。
通过对快速排序的图解和代码实现的学习,相信您对这种排序算法有了更深入的理解和掌握。
- CentOS6.7 中使用 cmake 编译安装 MySQL5.5.32 的方法
- MySQL 包含哪些数字函数
- 如何使用Redis慢查询日志
- 在CentOS上如何通过Docker方式安装Redis
- Navicat工具创建MySQL数据库连接的方法
- MySQL中if then出错的解决办法
- 如何为Redis配置多个数据库
- MySQL 流程控制函数的使用方法
- Spring Boot如何集成Redis哨兵主从实现
- Mysql 数据库手动与定时备份方法
- MySQL数据库中触发器和事务的应用方法
- 在Linux系统中安装redis的方法
- 如何创建与删除MySQL触发器
- 如何实现Redis7.0集群部署
- SQL语句中AND运算符与OR运算符的使用方法