快排代码golang 挖坑
发布时间:2024-12-22 23:56:09
快速排序(Quick Sort)是一种常用的排序算法,其核心思想是通过递归地将数组分成较小和较大的两个子数组,然后再分别对这两个子数组进行排序,最终将整个数组变成有序的。在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{64, 34, 25, 12, 22, 11, 90}
n := len(arr)
quickSort(arr, 0, n-1)
fmt.Println("Sorted array:", arr)
}
```
## 快速排序的原理
快速排序的核心思想是选择一个基准元素,将数组中小于基准元素的数放在基准元素的左边,将大于基准元素的数放在右边,然后对左右两个子数组分别进行递归排序,最终实现整个数组的有序。
## 快速排序的实现步骤
1. 选择一个基准元素。可以选择数组的第一个元素、最后一个元素或者随机选择。
2. 定义两个指针:头指针和尾指针。头指针向右移动,尾指针向左移动,当头指针所在位置的元素大于基准元素且尾指针所在位置的元素小于基准元素时,交换头指针和尾指针所在位置的元素。
3. 重复步骤2,直到头指针和尾指针相遇。
4. 将基准元素与头指针所在位置的元素交换,使得基准元素左边的元素都小于它,右边的元素都大于它。
5. 对基准元素左边的子数组和右边的子数组分别进行递归排序,直到数组有序。
## 示例
假设有一个未排序的数组:[64, 34, 25, 12, 22, 11, 90],我们可以按照以下步骤进行快速排序:
1. 选择基准元素为数组的最后一个元素,即90。
2. 设置头指针为数组的开头,尾指针为数组的结尾。
3. 头指针所在位置为64,尾指针所在位置为90,交换头指针和尾指针所在位置的元素,数组变为:[64, 34, 25, 12, 22, 11, 25]。
4. 头指针所在位置为34,尾指针所在位置为25,不满足条件,头指针右移。
5. 头指针所在位置为25,尾指针所在位置为11,交换头指针和尾指针所在位置的元素,数组变为:[11, 34, 25, 12, 22, 64, 25]。
6. 头指针所在位置为12,尾指针所在位置为34,交换头指针和尾指针所在位置的元素,数组变为:[11, 12, 25, 34, 22, 64, 25]。
7. 头指针所在位置为22,尾指针所在位置为25,不满足条件,头指针右移。
8. 头指针和尾指针相遇,将基准元素90与头指针所在位置的元素交换,数组变为:[11, 12, 25, 34, 22, 64, 90]。
9. 左边子数组[11, 12, 25, 34, 22, 64]和右边子数组[90]分别递归进行快速排序。
10. 排序结束后,数组变为有序的:[11, 12, 22, 25, 34, 64, 90]。
## 总结
快速排序是一种高效的排序算法,其时间复杂度为O(nlogn),在实际应用中被广泛使用。通过选择合适的基准元素并进行递归排序,快速排序能够快速将大规模的数据排序成有序的结果。如果你是一个Golang开发者,对于快速排序算法的理解和实现是很重要的,它可以帮助你更好地处理和优化数据排序的问题。
相关推荐