技术文摘
算法基础之快速排序的图解及 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)。不过,通过合理选择基准元素,可以有效地避免最坏情况的发生。
通过对快速排序的图解和代码实现的学习,相信您对这种排序算法有了更深入的理解和掌握。
- 贺建奎因“基因编辑婴儿”刚被判三年有期徒刑
- Spring Boot 应用启动阶段执行代码的多种记忆方式:一张图呈现
- Python 异常信息简化:一行代码实现错误清晰与排版美观
- 国网吉林电力云平台和数据中台上线发布 率先推进泛在电力物联网建设新进程
- 连接池的定义与实现方法
- 华为印度高管向谷歌发出警告:我们即将做好替换准备
- 大公司为何必须采用微服务?
- 以下常见互联网架构模式全在这
- 舟谱数据:执着与克制,有用乃数据智能金标准
- 深入剖析 Java 虚拟机:借助 VisualVM 对高并发项目展开性能解析
- 无需编程!掌握此工具,图表联动瞬间达成
- 深入探究 Class 类:掌握反射必杀技,一通百通
- Python 达成图片中所有人脸的识别与显示
- 微服务中保证事务一致性的深度剖析
- 8 大开发员必用的网页应用程序,好用到哭!