每次都找一个枢纽(下面代码用数组的最后一个),将它放到正确的位置,再把这个枢纽位置的俩边进行递归。
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语言实现代码,帮助读者理解快速排序的具体操作。
58万+

被折叠的 条评论
为什么被折叠?



