go语言的快速排序怎么写
时间: 2023-03-09 16:11:28 浏览: 109
Go语言的快速排序可以使用如下的代码实现:func quickSort(values []int) { if len(values) <= 1 { return } pivot := values[0] tail := len(values) - 1 for i := 1; i <= tail; { if values[i] < pivot { values[i], values[tail] = values[tail], values[i] tail-- } else { i++ } } values[0], values[tail] = values[tail], values[0] quickSort(values[:tail]) quickSort(values[tail+1:]) }
相关问题
go语言写一个快速排序算法
以下是使用Go语言实现的快速排序算法:
```
package main
import "fmt"
// 快速排序函数
func quickSort(nums []int, left int, right int) {
if left >= right {
return
}
pivot := nums[left] // 选择左侧第一个元素作为基准值
i, j := left, right
for i < j {
// 从右往左找到第一个小于基准值的元素
for i < j && nums[j] >= pivot {
j--
}
nums[i] = nums[j] // 将该元素放到左侧
// 从左往右找到第一个大于基准值的元素
for i < j && nums[i] <= pivot {
i++
}
nums[j] = nums[i] // 将该元素放到右侧
}
nums[i] = pivot // 将基准值放到排序后的位置
quickSort(nums, left, i-1) // 对左侧进行递归排序
quickSort(nums, i+1, right) // 对右侧进行递归排序
}
func main() {
nums := []int{5, 3, 7, 2, 8, 4, 1, 9, 6}
quickSort(nums, 0, len(nums)-1)
fmt.Println(nums) // 输出排序后的数组
}
```
在上述代码中,我们定义了一个`quickSort()`函数来实现快速排序算法。该函数的参数包括待排序的数组`nums`、待排序区间的左右边界`left`和`right`。
我们首先选择左侧第一个元素作为基准值`pivot`,然后定义两个指针`i`和`j`分别指向待排序区间的左右边界。接着,我们从右往左找到第一个小于基准值的元素,将其放到待排序区间的左侧;然后从左往右找到第一个大于基准值的元素,将其放到待排序区间的右侧。重复执行上述过程,直到`i`和`j`相遇。
最后,我们将基准值`pivot`放到排序后的位置,即`nums[i]`的位置。接着,我们对左侧和右侧分别进行递归排序,直到待排序区间大小为1或0。
在`main()`函数中,我们定义一个待排序的数组`nums`,并对其进行快速排序。最后,我们输出排序后的数组。
用go语言写一个快速排序
### 回答1:
我可以给你一份快速排序的Go语言示例代码:package mainimport "fmt"func quickSort(arr []int) []int {
if len(arr) <= 1 {
return arr
} pivot := arr[0]
var left []int
var right []int for i := 1; i < len(arr); i++ {
if arr[i] <= pivot {
left = append(left, arr[i])
} else {
right = append(right, arr[i])
}
} left = quickSort(left)
right = quickSort(right) left = append(left, pivot)
left = append(left, right...) return left
}func main() {
arr := []int{5, 7, 1, 4, 9, 2, 8, 6, 3, 10}
fmt.Println("Quick Sort:", quickSort(arr))
}
### 回答2:
快速排序是一种常用的排序算法,使用分治的思想进行排序。下面是用Go语言实现的快速排序算法代码:
```go
package main
import "fmt"
func quickSort(arr []int, low, high int) {
if low < high {
pivot := partition(arr, low, high)
quickSort(arr, low, pivot-1)
quickSort(arr, pivot+1, high)
}
}
func partition(arr []int, low, high int) int {
pivot := arr[high]
i := low - 1
for j := low; j < high; j++ {
if arr[j] < pivot {
i++
arr[i], arr[j] = arr[j], arr[i]
}
}
arr[i+1], arr[high] = arr[high], arr[i+1]
return i + 1
}
func main() {
arr := []int{5, 2, 6, 1, 9, 3}
quickSort(arr, 0, len(arr)-1)
fmt.Println(arr)
}
```
以上代码中,quickSort函数是快速排序的核心函数,它首先选取一个基准值(通常为数组最后一个元素),然后将数组中小于基准值的元素移动到基准值左边,大于基准值的元素移动到基准值右边。之后,递归地对基准值左右两侧的子数组进行快速排序。partition函数用于实现分割数组的操作。最后,在main函数中,我们定义一个初始数组arr,调用quickSort函数对其进行排序,并打印排序后的结果。
这是一个基础的快速排序实现,时间复杂度为O(nlogn),在实际使用时,还可以对其进行优化,例如随机选择基准值以降低最坏情况的发生概率,或者使用插入排序来处理小规模的子数组,等等。
### 回答3:
快速排序(QuickSort)是一种常用的排序算法,其思想是通过选择一个基准元素,并将其他元素与基准元素进行比较,将小于基准元素的放在左边,大于基准元素的放在右边,再对左右两边的子数组进行递归排序。
以下是使用Go语言编写的快速排序算法实现:
```go
package main
import "fmt"
func quickSort(arr []int, left int, 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 int, 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{7, 2, 1, 6, 8, 5, 3, 4}
fmt.Println("Original array:", arr)
quickSort(arr, 0, len(arr)-1)
fmt.Println("Sorted array:", arr)
}
```
上述代码中的`quickSort`函数负责递归地对子数组进行排序,`partition`函数用于为当前数组选择基准元素,并进行元素交换操作。在`main`函数中,我们可以看到对一个示例数组进行排序的过程。
该算法的时间复杂度为O(n log n),其中n为待排序数组的长度。通过比较和交换操作,快速排序能够快速并且高效地将一个无序数组转换成一个有序数组。
阅读全文