📜  快速排序(1)

📅  最后修改于: 2023-12-03 14:54:19.363000             🧑  作者: Mango

快速排序


简介

快速排序是一种常见的排序算法,它也是一种分治策略的算法。该算法的基本思想是:选择一个枢轴(pivot),将待排序元素分成左右两部分,使得左边的元素都小于等于枢轴,右边的元素都大于等于枢轴;然后递归地对左右两部分的元素进行快速排序,最终得到排好序的序列。

实现

快速排序的实现思路如下:

  1. 选择一个枢轴pivot。
  2. 将待排序的序列分成两部分:
    • 左边的元素都小于等于pivot。
    • 右边的元素都大于等于pivot。
  3. 递归地对左右两部分进行快速排序。

伪代码如下:

快速排序(array, left, right):
    if left < right:
        pivot_index = partition(array, left, right)
        快速排序(array, left, pivot_index - 1)
        快速排序(array, pivot_index + 1, right)

partition(array, left, right):
    pivot = array[right]
    i = left - 1
    for j from left to right - 1:
        if array[j] <= pivot:
            i = i + 1
            swap array[i] with array[j]
    swap array[i+1] with array[right]
    
    return i + 1
时间复杂度

快速排序的时间复杂度为O(nlogn)。在最优情况下,即每次选择的pivot都恰好为序列的中位数时,时间复杂度为O(nlogn)。在最坏情况下,即每次选择的pivot都为最大或最小值时,时间复杂度为O(n^2)。

稳定性

快速排序不是稳定的排序算法。稳定性指的是在排序过程中相同值的元素在排序后的相对位置是否发生变化,如果不发生变化则称为稳定的排序算法。

总结

快速排序作为一种经典的排序算法,具有时间复杂度低、适合大规模数据排序等优点。但是在最坏情况下,时间复杂度较高,且不稳定。因此需要根据具体场景选择合适的排序算法。