【算法】快速排序

快速排序(简称快排)的核心思想是分治,关键两个要素,一是中心点,二是分区。将list的第一个元素选定为中心点pivot,将list中所有小于pivot的元素统统放到pivot的左边,大于(等于)pivot的元素放到pivot的右边。此时,pivot处于list的值的中心位置,pivot的位置已经排好了。然后在左边和右边采用递归调用,重复此过程,就可以将list排好。

python代码实现(兼容Java版本):

def quick_sorted(nums):
#     print("nums is: " + str(nums), end = " ")
    
    if(len(nums) <= 1):
#         print()
        return nums
    
    i,j = 0, len(nums)-1
    pivot = nums[0]
#     print(" pivot is: " + str(pivot), end = " ")
    leftlist = []
    #注意在遍历nums时,要把pivot自身跳过去,这样就可以处理有重复元素的问题。因为pivot是nums【0】,所以从下标1开始遍历
    for i in nums[1:]:
        if(i<pivot):
            leftlist.append(i)
    rightlist = []
    for i in nums[1:]:
        if(i>=pivot):
            rightlist.append(i)
#     print("left is: " + str(leftlist), end=" —— ")
#     print("right is: " + str(rightlist))
    left = quick_sorted(leftlist)
    right = quick_sorted(rightlist)
    
    return left + [pivot] + right

Python简化版:

def quick_sorted(nums):   
    if(len(nums) <= 1):
        return nums
    
    pivot = nums[0]
    left = quick_sorted([x for x in nums[1:] if x < pivot])
    right = quick_sorted([x for x in nums[1:] if x >= pivot])
    
    return left + [pivot] + right

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值