基于Python——快速排序

思路:

先从待排序的数组中找出一个数作为基准数(取第一个数即可),然后将原来的数组划分成两部分:小于基准数的左子数组和大于等于基准数的右子数组。然后对这两个子数组再递归重复上述过程,直到两个子数组的所有数都分别有序。最后返回“左子数组” + “基准数” + “右子数组”,即是最终排序好的数组。

代码实现(一):

class Solution(object):

    # 实现快排
    def quicksort(self, nums):
        if len(nums) <= 1:
            return nums

        # 左子数组
        left = []
        # 右子数组
        right = []
        # 基准数
        base = nums.pop()
        print(nums)
        # 对原数组进行划分
        for x in nums:
            if x < base:
                left.append(x)
            else:
                right.append(x)

        # 递归调用
        return self.quicksort(right) + [base] + self.quicksort(left)


sulotion = Solution()
res = sulotion.quicksort(nums=[6, 5, 8, 0, 7])
print(res)

代码实现(二):

def quick_sort(nums):
    if len(nums) <= 1:
        return nums
        # 随意选取一个基准数,比如选取列表第一个数
    base = nums[0]
    # left列表为nums中比基准数base小或等于base的数组成的列表
    left = [x for x in nums[1:] if x <= base]
    # right列表为nums中比基准数base大的数组成的列表
    right = [x for x in nums[1:] if x > base]
    # 对left和right列表递归排序
    return quick_sort(left) + [base] + quick_sort(right)


res = quick_sort(nums=[6, 5, 8, 0, 7])
print(res)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容