请golang写一段快速排序算法的代码
时间: 2023-08-31 14:21:37 浏览: 112
### 回答1:
package main
import (
"fmt"
)
func quickSort(arr []int) []int {
if len(arr) <= 1 {
return arr
}
pivot := arr[0]
left := []int{}
right := []int{}
for _, v := range arr[1:] {
if v < pivot {
left = append(left, v)
} else {
right = append(right, v)
}
}
left = quickSort(left)
right = quickSort(right)
left = append(left, pivot)
return append(left, right...)
}
func main() {
arr := []int{3, 4, 1, 5, 9, 6, 2, 8, 7}
fmt.Println(quickSort(arr))
}
### 回答2:
快速排序是一种常用的排序算法,它的基本思想是通过选择一个基准元素,将待排序的数组分割成两部分,使得左边的元素都小于等于基准元素,右边的元素都大于等于基准元素,然后递归地对左右两部分进行排序。下面是使用Go语言实现快速排序算法的代码:
```go
package main
import "fmt"
func quickSort(arr []int) []int {
if len(arr) <= 1 {
return arr
}
pivot := arr[0] // 选择第一个元素作为基准
var left, right []int
for _, element := range arr[1:] {
if element <= pivot {
left = append(left, element) // 小于等于基准的放在左边
} else {
right = append(right, element) // 大于基准的放在右边
}
}
// 递归地对左右两部分进行排序
left = quickSort(left)
right = quickSort(right)
// 合并排序结果
return append(append(left, pivot), right...)
}
func main() {
arr := []int{5, 2, 8, 3, 9, 1}
fmt.Println("原始数组:", arr)
sortedArr := quickSort(arr)
fmt.Println("快速排序后的数组:", sortedArr)
}
```
上述代码中,首先定义了一个quickSort函数,接收一个整数数组作为参数。当数组长度小于等于1时,直接返回数组,因为表明已经是有序的。
然后选择数组的第一个元素作为基准,遍历数组中剩余的元素,将小于等于基准的元素放在左边,将大于基准的元素放在右边。然后递归地对左右两部分进行排序,并将排序结果合并起来,返回最终的排序结果。
在main函数中,定义一个待排序的数组,然后调用quickSort函数进行排序,最后打印排序后的结果。
### 回答3:
Sure, here is a implementation of quicksort algorithm using Golang:
```go
package main
import "fmt"
func quicksort(arr []int) []int {
if len(arr) < 2 {
return arr
}
pivot := arr[0]
less := make([]int, 0)
equal := make([]int, 0)
greater := make([]int, 0)
for _, num := range arr {
if num < pivot {
less = append(less, num)
} else if num == pivot {
equal = append(equal, num)
} else {
greater = append(greater, num)
}
}
return append(append(quicksort(less), equal...), quicksort(greater)...)
}
func main() {
arr := []int{5, 9, 3, 1, 2, 8, 4, 7, 6}
sortedArr := quicksort(arr)
fmt.Println(sortedArr)
}
```
这段代码实现了快速排序算法。首先定义了一个 `quicksort` 函数,它以一个整数切片作为输入参数,并返回一个已排序的整数切片。在 `quicksort` 函数内部,首先判断切片的长度是否小于 2,如果是,则直接返回该切片。如果不是,则选择第一个元素作为基准值。
然后,初始化三个新的整数切片 `less`、`equal` 和 `greater`,用于存储比基准值小、等于和大的数。使用 for 循环遍历切片,将元素按照大小分别放入对应的切片中。
最后,通过递归调用 `quicksort` 函数对 `less` 和 `greater` 两个切片进行排序,并将结果与 `equal` 切片连接起来,形成最终的排序后的切片。
在 `main` 函数中,定义了一个测试数组 `arr`,并调用 `quicksort` 函数进行排序,将结果打印输出。运行程序,将会输出已经排序好的整数切片 `[1 2 3 4 5 6 7 8 9]`。
阅读全文