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

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

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


算法原理及介绍


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


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


算法过程描述


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


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


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


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



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


算法排序图解如下


20201201143352504.gif


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,应该放在左边,所以将i位置赋值为j
        # 此时j位置空出
        nums[i] = nums[j]
        # I是从左向右走,如果值小于pivot则位置保持不变,i右移
        while i < j and nums[i] < pivot:
            i += 1
        # 不满足上述条件时,nums[i]>=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
相关文章
|
1月前
|
算法 Python
Python算法编程:冒泡排序、选择排序、快速排序
Python算法编程:冒泡排序、选择排序、快速排序
|
6月前
|
搜索推荐 Python
PYTHON的快速排序
PYTHON的快速排序
40 0
|
4月前
|
搜索推荐 Python
快速排序:Python 中的速度之王,揭秘它的递归魔法与性能极限!
【7月更文挑战第12天】快速排序**是高效排序算法,基于分治策略。它选择基准值,将数组分成小于和大于基准的两部分,递归地对两部分排序。
59 6
|
4月前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
【7月更文挑战第12天】Python的快速排序**以分治策略实现高效排序,平均时间复杂度$O(nlogn)$,优于$O(n^2)$的冒泡排序。基本实现通过选取基准元素分割数组,然后递归排序两部分。优化版使用随机基准避免最坏情况。对比显示优化后排序更稳定,适应不同数据集,提升程序性能。
55 4
|
4月前
|
算法 搜索推荐 编译器
算法高手养成记:Python快速排序的深度优化与实战案例分析
【7月更文挑战第11天】快速排序是编程基础,以O(n log n)时间复杂度和原址排序著称。其核心是“分而治之”,通过选择基准元素分割数组并递归排序两部分。优化包括:选择中位数作基准、尾递归优化、小数组用简单排序。以下是一个考虑优化的Python实现片段,展示了随机基准选择。通过实践和优化,能提升算法技能。**
56 3
|
5月前
|
搜索推荐 算法 Python
Python教程:使用Python实现冒泡排序和快速排序
排序算法根据其实现原理和效率可以分为多种类型,包括冒泡排序、选择排序、插入排序、归并排序、快速排序等。这些算法在不同的场景下具有不同的优劣势,需要根据实际需求选择合适的算法。
60 3
|
4月前
|
搜索推荐 Python
python实现冒泡排序、快速排序
python实现冒泡排序、快速排序
|
6月前
|
搜索推荐 算法 Python
python快速排序和冒泡排序
python快速排序和冒泡排序
48 8
|
6月前
|
算法 搜索推荐 C++
Python 快速排序:原理、使用场景与实现方法
本文主要介绍了Python 快速排序:原理、使用场景与实现方法
88 5
|
6月前
|
搜索推荐 Python
python实现快速排序算法。
【2月更文挑战第9天】【2月更文挑战第23篇】python实现快速排序算法。
55 0