列表、字符串与快速排序
我正在使用快速排序来对我的列表进行排序。这个列表里全是数字,格式是这样的:
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