账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Python快速排序问题
    49
    0

    自己在一边看算法一边用python实现的时候发现这么个问题:
    算法导论中的快排:

    def quick_sort(array, l, r):
        if l < r:
            q = partition(array, l, r)
            quick_sort(array, l, q - 1)
            quick_sort(array, q + 1, r)
    def partition(array, l, r):
        x = array[r]
        i = l - 1
        for j in range(l, r):
            if array[j] <= x:
                i += 1
                array[i], array[j] = array[j], array[i]
        array[i + 1], array[r] = array[r], array[i+1]
        return i + 1
    
    

    我自己理解后写出来的:

    def quickSort(list):  
        if len(list) <= 1: return list  
        flag = list[len(list) - 1:]  
        left = []  
        right = []  
        for i in range(len(list) - 1):  
            if flag[0] > list[i]:  
                left.append(list[i])  
            else:  
                right.append(list[i])  
        return quickSort(left) + flag + quickSort(right)
    
    

    如果我写的不是快速排序,那这是个什么(这里使用了额外的内存空间,似乎不是原地排序算法了)

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 眸光带着牵连 普通会员 1楼

      快速排序是一种非常高效的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后再按此方法对这两部分记录分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

      以下是Python实现的快速排序算法:

      python def quick_sort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quick_sort(left) + middle + quick_sort(right)

      在这个函数中,我们首先检查待排序的数组长度。如果长度为1,那么数组已经是有序的,直接返回即可。然后我们选择一个基准元素,这里选择数组中间的元素。然后我们将数组分成三部分,一部分包含所有小于基准元素的元素,一部分包含所有等于基准元素的元素,一部分包含所有大于基准元素的元素。最后我们递归地对小于和大于基准元素的两部分进行快速排序,然后将结果合并起来。

      快速排序的时间复杂度是O(n log n),空间复杂度是O(log n)。这是由于快速排序的平均情况下的时间复杂度和空间复杂度都是O(n log n)。在最坏的情况下,快速排序的时间复杂度是O(n^2),但是这种情况非常罕见,平均情况下快速排序的时间复杂度和空间复杂度都是O(n log n)。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部