美文网首页
用python实现各种排序

用python实现各种排序

作者: loick | 来源:发表于2019-12-03 16:56 被阅读0次

    从简单到复杂大致排序

    1. 内置排序函数(不要太简单好吗)

    nums.sort()  # 原地排序,不反回
    sorted(nums) # 返回排序后的数组
    

    2. 冒泡排序(排序的helloword)

    def bubbleSort(nums):
        for i in range(len(nums))[::-1]:
            for j in range(i+1, len(nums)):
                if nums[j] < nums[j-1]:
                    nums[j], nums[j-1] = nums[j-1], nums[j]
    

    3.插入排序(静静躺着,期待下面大佬的表演)

    def insertSort(nums):
        snums = []
        for i, num in enumerate(nums):
            j = i
            while j - 1 >= 0 and snums[j-1] > num:
                j -= 1
            snums.insert(j, num)
        return snums
    

    4.归并排序(用上递归了!)

    def mergeSort(nums):
        if len(nums) < 2:
            return nums
        mid = len(nums)//2
        l = mergeSort(nums[:mid])
        r = mergeSort(nums[mid:])
        for i in range(len(nums)):
            if not r or l[0] < r[0]:
                nums[i] = l.pop(0)
            else:
                nums[i] = r.pop(0)
        return nums
    

    5.shell排序(插入排序?Nope)

    def shellSort(nums):
        gap = len(nums)//2
        while gap:
            for i in range(gap, len(nums)):
                b = nums[i]
                j = i
                while j >= gap and nums[j-gap] > b:
                    nums[j] = nums[j-gap]
                    j -= gap
                nums[j] = b
            gap = gap // 2
        return nums
    

    6.快速排序(我可有点难理解哟)

    def quickSort(nums):
        def rsort(lo, hi):
            if lo >= hi:
                return
            i = lo
            for j in range(lo, hi):
                if nums[j] < nums[hi]:
                    nums[i], nums[j] = nums[j], nums[i]
                    i += 1
            nums[i], nums[hi] = nums[hi], nums[i]
            rsort(lo, i-1)
            rsort(i+1, hi)
        rsort(0, len(nums-1))
    

    相关文章

      网友评论

          本文标题:用python实现各种排序

          本文链接:https://www.haomeiwen.com/subject/nxthgctx.html