常用排序算法之快速排序

Posted bamboo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用排序算法之快速排序相关的知识,希望对你有一定的参考价值。

快速排序(Quick Sort)

快速排序,又称分区交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序n个项目要O(n\\log n)次比较。在最坏状况下则需要O(n^2)次比较。(inner loop)可以在大部分的架构上很有效率地达成。

快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列。步骤为:

  • 挑选基准值:从数列中挑出一个元素,称为“基准”(pivot),
  • 分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成,
  • 递归排序子序列:递归地将小于基准值元素的子序列和大于基准值元素的子序列排序。

贴上一份手写golang代码参考:

package main

import (
    "fmt"
)

func main() {

    s := []int {9, 8, 7, 6, 5, 4, 3, 2, 1}
    res := quickSort(s)
    fmt.Println(res)
}

func quickSort(values []int) []int {
    if len(values) <= 1 {
        return values
    }

    middle := values[0]
    left := make([]int, 0, 10)
    right := make([]int, 0, 10)

    for i := 1; i < len(values); i++ {
        if middle <= values[i] {
            right = append(right, values[i])
        } else {
            left = append(left, values[i])
        }
    }

    left = quickSort(left)
    right = quickSort(right)

    return append(left, append([]int {middle}, right...)...)
}

以上是关于常用排序算法之快速排序的主要内容,如果未能解决你的问题,请参考以下文章

算法排序之堆排序

常用算法Java实现之快速排序

面试常用算法之排序

Java学习笔记之十一Java中常用的8大排序算法详解总结

分治法应用之二分查找 快速排序递归排序

常用排序算法之冒泡排序选择排序