python实现快速排序(QuickSort)

python实现【快速排序】(QuickSort)

算法原理及介绍

快速排序的基本思想:通过选择一个关键字,一趟排序将待排记录分隔成独立的两部分,其中一部分数据均比选取的关键字小,而另一部分数据均比关键字大,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

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

算法过程描述

快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:

  1. 从数列中挑出一个元素,称为 “基准”(pivot)

  2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作

  3. 递归排序子序列:递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

注:递归到最底部的判断条件是数列的大小是零或一,此时该数列显然已经有序。
选取基准值有数种具体方法,此选取方法对排序的时间性能有决定性影响。

算法排序图解如下

python实现快速排序(QuickSort)_第1张图片
在这里插入图片描述

python实现代码

def partition(nums, low, high):
    # 进行分区操作,选取第一个值为基准
    pivot = nums[low]
    i = low
    j = high
    while i < j:
        # j是从右向左走,如果值大于pivot则位置保持不变,j左移
        while i < j and nums[j] >= pivot:
            j -= 1
        # 不满足上述条件时,nums[j]=pivot,应该放在右边,所以将h位置赋值为i
        # 此时j位置空出
        nums[j] = nums[i]
    # 将pivot的值放到正确的索引位置
    nums[i] = pivot
    return  i

# 快速排序函数
def quickSort(arr, low, high):
    # arr[] --> 排序数组
    # low  --> 起始索引
    # high  --> 结束索引
    if low < high:
        pi = partition(arr, low, high)   #pi为基准值的正确索引位置
        quickSort(arr, low, pi - 1)  #递归的排序子序列
        quickSort(arr, pi + 1, high) #递归的排序子序列
    return arr

想了解其他排序相关算法可以,看作者的排序算法专栏。

如果喜欢作者,欢迎点赞、收藏及关注,谢谢!
点击下面相应的链接即可查看各个算法的详细介绍及python实现方法

  1. 冒泡排序(BubbleSort)
  2. 选择排序(SelectionSort)
  3. 插入排序(InsertSort)
  4. 归并排序(MergeSort)
  5. 快速排序(QuickSort)
  6. 堆排序(Heap Sort)
  7. 计数排序(Count Sort)
  8. 桶排序(Bucket Sort)
  9. 基数排序(Radix Sort)
  10. 希尔排序(Shell Sort)

你可能感兴趣的:(python实现快速排序(QuickSort))