带有负数的排序列表

时间:2016-05-12 07:25:00

标签: python

我试图在不修改现有列表或使用内置函数(如android:showAsActionsort)的情况下对列表进行排序。遇到负数时我遇到了麻烦。例如,对列表进行排序

sorted

产生

[7,1,-5,18]

而不是

[1, -5, 7, 18]

我的代码:

[-5, 1, 7, 18]

2 个答案:

答案 0 :(得分:1)

您可以使用此选择排序逻辑:

>>> l=[7,1,-5,18]
>>> for i in range(len(l)):
...     for j in range(i+1, len(l)):
...         if l[j]<l[i]:
...             l[i],l[j]=l[j], l[i]
... 
>>> l
[-5, 1, 7, 18]

答案 1 :(得分:0)

这里的问题是,您要将值附加到列表的末尾,然后将它们移动到一个位置,如果它们小于前一个元素。更改列表中元素的位置后,您必须检查是否需要再次移动

一步一步,这就是:

remaining elements to sort | "sorted" list | what happens
7,1,-5,18                    []              
1,-5,18                      [7]             first element enters the sorted list
-5,18                        [7,1]           2nd element enters the sorted list
-5,18                        [1,7]           7>1, so last element changes location
18                           [1,7,-5]        3rd element enters sorted list
18                           [1,-5,7]        7>-5, last element changes location
[]                           [1,-5,7,18]     instead of checking whether 1>-5, the 4th
                                             element enters the list

通过将if更改为如下所示的循环,可以轻松解决此问题:

lst = [7,1,-5,18]
b = list()
for i in range(len(lst)):
    b.append(lst[i])
    while i>0 and b[i]<b[i-1]:
        b[i], b[i-1] = b[i-1], b[i]
        i-= 1

print b