文章插图
快速排序是由东尼·霍尔所发明的一种排序算法,时间复杂度是 O(nlogn), 是不稳定排序算法 。
【Go 语言实现快速排序算法】快速排序使用分治思想,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 。
算法演示通过动图来演示一下这个算法的执行过程:
文章插图
- 从数列中挑出一个元素,作为基准(pivot) 。
- 重新排序数列,所有比基准小的值放到基准前面,所有比基准大的值放到基准后面 。排序之后,基准值便处于数列的中间位置,这个过程称为分区 。
- 再递归对两个子序列分别进行排序操作 。
package mainimport "fmt"func partition(list []int, low, high int) int {// 选择基准值pivot := list[high]for low < high {// low 指针值 <= pivot low 指针右移for low < high && pivot >= list[low] {low++}// low 指针值 > pivot low 值移到 high 位置list[high] = list[low]// high 指针值 >= pivot high 指针左移for low < high && pivot <= list[high] {high--}// high 指针值 < pivot high 值移到 low 位置list[low] = list[high]}// pivot 替换 high 值list[high] = pivotreturn high}func QuickSort(list []int, low, high int) {if high > low {// 分区pivot := partition(list, low, high)// 左边部分排序QuickSort(list, low, pivot-1)// 右边部分排序QuickSort(list, pivot+1, high)}}func main() {list := []int{2, 44, 4, 8, 33, 1, 22, -11, 6, 34, 55, 54, 9}QuickSort(list, 0, len(list)-1)fmt.Println(list)}
以上就是本文的全部内容 。参考文章:
- https://mojotv.cn/algorithm/golang-quick-sort 。
推荐阅读
- 搜索大战白热化:微软全面开放Bing Chat,谷歌或实现个性化搜索
- 电子竞技|如何实现更高层次的职业发展
- 求职|工资与就业,怎么才能实现自己的职业理想
- 几个玩转2D/3D渲染的开源JS库,助你快速实现各种2D/3D动画特效
- 取代C++!微软正在改用Rust语言重写Win11内核
- MyBatis的延迟加载,你知道是怎么实现的么?
- Redis+DB实现基于号段的发号器原理
- 抖音直播间小风车怎样跳转微信?如何实现跳转微信技术!
- 姚安娜|伊能静发千字长文!爆料大量秦昊真实现状,网友:字里行间全是爱
- 发型|健身达人福利!快速吹干汗水湿发的吹风机!