杨桃星星 2023-10-07 15:32 采纳率: 66.7%
浏览 7
已结题

这个用Python做Quick sort的程序怎么修改正确

img

img

Quick sort 是这个意思,就输一个列表里面数字排序的方法,然后我要做的程序选定这个pivot支点为中间值(向下取)

以下是我的代码以及出现的问题


def fenzu(sequence):
    l = []
    r = []
    m = []
    for i in range(len(sequence)):
        p = sequence[(len(sequence) - 1) // 2]
        if sequence[i] < p:
            l.append(sequence[i])
        elif sequence[i] > p:
            r.append(sequence[i])
        else:
            m.append(p)
    sequence = l + m + r
    return sequence,l,r,m
def quickSort( sequence ):
    fenzu(sequence)
    sequence,left,right,middle = fenzu(sequence)

    if len(left) > 1:
        left = fenzu(left)[0]
        l,r = fenzu(left)[1],fenzu(left)[2]
        while len(l) > 1 or len(r) > 1:
            left = fenzu(left)[0]
            l,r = fenzu(left)[1],fenzu(left)[2]
            print(left,l,r)
    if len(right) > 1:
        right = fenzu(right)[0]
        l,r = fenzu(right)[1],fenzu(right)[2]
        while len(l) > 1 or len(r) > 1:
            right = fenzu(right)[0]
            l,r = fenzu(right)[1],fenzu(right)[2]
            print(right,l,r)

    sequence = left + middle + right
    print(sequence,left,right,middle)
    return sequence

print(quickSort([-100, -18, 53, -45, -66, -17, -9, -71, 49, -75]))

里面设置的一些print是为了方便查找问题
现在的问题就是最后right组里死循环,不知道该怎么解决,如图

img

已经磨了一整天了还是不行,非常感谢回复!

  • 写回答

3条回答 默认 最新

  • sy-sy- 2023-10-07 15:41
    关注
    def quick_sort(arr):
        # 基线条件:如果列表为空或只有一个元素,直接返回原列表
        if len(arr) <= 1:
            return arr
        
        # 选择列表中的中间元素作为基准值(pivot)
        pivot = arr[len(arr) // 2]
        
        # 初始化三个子列表:小于基准值、等于基准值和大于基准值
        less = []
        equal = []
        greater = []
        
        # 遍历列表,并根据元素与基准值的比较结果将元素放入相应的子列表中
        for num in arr:
            if num < pivot:
                less.append(num)
            elif num == pivot:
                equal.append(num)
            else:
                greater.append(num)
                
        # 递归调用快速排序函数对小于和大于基准值的子列表进行排序
        sorted_less = quick_sort(less)
        sorted_greater = quick_sort(greater)
        
        # 将三个子列表按顺序合并起来
        return sorted_less + equal + sorted_greater
    
    # 测试快速排序算法
    numbers = [9, 3, 7, 2, 6, 1, 8, 5, 10, 4]
    sorted_numbers = quick_sort(numbers)
    print(sorted_numbers)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月22日
  • 已采纳回答 10月14日
  • 创建了问题 10月7日