列表、字符串与快速排序

1 投票
1 回答
622 浏览
提问于 2025-04-18 08:28

我正在使用快速排序来对我的列表进行排序。这个列表里全是数字,格式是这样的:

1999.03,0.9
2000.08,0.1
1988.1,0.8

小数点前的数字代表年份,小数点后的数字代表月份,逗号后面的数字是价格。我的快速排序可以把它们排好序,但排序后价格却消失了,我不知道为什么。我刚学python,可能做得不太好,但我还是希望有人能告诉我为什么这样不行。

def quick_sort(arr):
    if arr == []:
        return []
    else:
        element = arr[len(arr)/2]
        pivot = float(element[0:7])
        lesser = quick_sort([x for x in arr[1:] if float(x[0:7]) < pivot])
        greater = quick_sort([x for x in arr[1:] if float(x[0:7]) >= pivot])
        return lesser + [pivot] + greater

输出结果看起来是这样的:

1988.1
1999.03
2000.08

我猜问题出在快速排序的递归调用的语法上,但我对python了解得不够,没法找到具体问题。

1 个回答

2

你把基准值(pivot)切下来,然后和其他的部分进行比较。在这里,你需要保留整个元素:

element = arr[len(arr) / 2]
pivot = float(element[:7])

这样你就可以和你的基准值 pivot 进行比较,结果列表是由 element 部分构成的。

结果的构建是通过以下方式完成的:

return lesser + [element] + greater

撰写回答