python快速排序视频_python实现快速排序(QuickSort)

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

算法原理及介绍

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

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

算法过程描述

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

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

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

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

注:递归到最底部的判断条件是数列的大小是零或一,此时该数列显然已经有序。

选取基准值有数种具体方法,此选取方法对排序的时间性能有决定性影响。

算法排序图解如下

在这里插入图片描述

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]

# 此时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

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

如果喜欢作者,欢迎点赞、收藏及关注,谢谢!

点击下面相应的链接即可查看各个算法的详细介绍及python实现方法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值