列表,字符串和快速排序

时间:2014-06-03 19:38:47

标签: python python-2.7 quicksort

我正在使用快速排序来整理我的列表。该列表中包含以下格式的数字:

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

我假设它在quicksort的递归调用中的语法,但是我不太了解python来发现它。

1 个答案:

答案 0 :(得分:2)

您剪切枢轴以将其与其他剪切进行比较。它在这里你放弃了部分。你必须保留整个元素:

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

因此,您可以与变量pivot进行比较,结果列表是使用element部分构建的。

结果的构建完成于:

return lesser + [element] + greater