Go 语言实现快速排序算法

开发 前端
快速排序使用分治思想,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

快速排序是由东尼·霍尔所发明的一种排序算法,时间复杂度是 O(nlogn), 是不稳定排序算法。

快速排序使用分治思想,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

算法演示

通过动图来演示一下这个算法的执行过程:

图片


  1. 从数列中挑出一个元素,作为基准(pivot)。
  2. 重新排序数列,所有比基准小的值放到基准前面,所有比基准大的值放到基准后面。排序之后,基准值便处于数列的中间位置,这个过程称为分区。
  3. 再递归对两个子序列分别进行排序操作。

Go 语言实现

代码如下:

package main

import "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] = pivot
    return 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。
责任编辑:姜华 来源: AlwaysBeta
相关推荐

2022-11-01 18:29:25

Go语言排序算法

2022-05-19 14:14:26

go语言限流算法

2022-04-18 10:01:07

Go 语言汉诺塔游戏

2022-03-07 09:42:21

Go快速排序

2020-08-12 08:56:30

代码凯撒密码函数

2024-08-29 13:23:04

WindowsGo语言

2013-02-21 17:02:00

C语言

2012-03-13 10:40:58

Google Go

2024-03-19 10:45:31

HTTPSGo语言

2021-06-09 09:06:52

Go语言算法

2022-04-27 15:18:30

Go 语言API排序算法

2021-08-04 08:56:34

语言Go排序

2021-07-12 15:50:55

Go 语言netstat命令

2024-06-06 09:47:56

2012-08-06 08:50:05

Go语言

2021-03-04 07:24:28

排序算法优化

2022-05-07 08:55:11

Go语言排序算法

2023-03-27 00:20:48

2023-07-31 08:01:13

二叉搜索测试

2021-07-26 09:47:38

Go语言C++
点赞
收藏

51CTO技术栈公众号