技术文摘
算法基础之快速排序的图解及 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)。不过,通过合理选择基准元素,可以有效地避免最坏情况的发生。
通过对快速排序的图解和代码实现的学习,相信您对这种排序算法有了更深入的理解和掌握。
- 解决 Win11 资源管理器一直重启的三种有效方法
- Win11 22581.1 安装错误 0x80070005 的解决办法
- Win11flash 必要组件未运行的解决办法
- Win11 指纹传感器无法使用,如何解决?
- Win11 微信消息在任务栏右下角不闪烁的修复方法
- Win11 中 DNS 服务器未响应的解决办法
- Win11 系统中文件夹选项的位置
- Win11 雷电模拟器无法打开的解决之策
- 如何解决 Win11 内存管理错误
- Win11 系统更新后 flashcs6 软件无法打开的原因及解决之道
- Win11 频繁弹出找不到 wt.exe 提示,两招教你快速解决!
- Win11 无法连接此网络的解决办法
- Win11 实现最佳电源效率的途径
- Win11 Dev 渠道能否换成 Beta ?切换教程详解
- Win11 微软商店的打开位置在哪