用go语言写一个快速排序
时间: 2023-09-16 20:04:58 浏览: 139
### 回答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为待排序数组的长度。通过比较和交换操作,快速排序能够快速并且高效地将一个无序数组转换成一个有序数组。
阅读全文
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)