使用go写一个快速排序
时间: 2023-09-06 12:08:05 浏览: 81
以下是使用Go语言实现的快速排序代码:
```go
package main
import "fmt"
func quickSort(arr []int, left, right int) {
if left < right {
pivot := partition(arr, left, right)
quickSort(arr, left, pivot-1)
quickSort(arr, pivot+1, right)
}
}
func partition(arr []int, left, right int) int {
pivot := arr[right]
i := left - 1
for j := left; j < right; j++ {
if arr[j] <= pivot {
i++
arr[i], arr[j] = arr[j], arr[i]
}
}
arr[i+1], arr[right] = arr[right], arr[i+1]
return i + 1
}
func main() {
arr := []int{9, 4, 2, 7, 3, 5, 8, 1, 6}
quickSort(arr, 0, len(arr)-1)
fmt.Println(arr)
}
```
输出:
```
[1 2 3 4 5 6 7 8 9]
```
在这个实现中,我们使用了递归来进行快速排序。函数 `quickSort` 的参数 `left` 和 `right` 分别是数组的左右边界。我们首先选取数组最右边的元素作为基准值(pivot),然后使用 `partition` 函数将数组划分为两部分,左边的元素小于或等于基准值,右边的元素大于基准值。最后,递归调用 `quickSort` 函数对左右两部分进行排序。`partition` 函数的实现基于双指针法。我们用 `i` 记录左边部分的右边界,即左边部分最后一个小于或等于基准值的元素,初始值为 `left-1`。然后我们从左到右遍历数组,如果当前元素小于或等于基准值,就将它交换到左边部分,即 `i` 所在的位置。最后,我们将基准值交换到 `i+1`,然后返回 `i+1` 作为新的基准值的位置。这样,数组就被划分为了两部分,左边的小于等于基准值,右边的大于基准值。
阅读全文