2013-02-24 150 views
0

刚刚学习Python并开始分类列表的主题。显示了两种类型的算法:插入和选择。所以,我有一个想法,并创造了这个:Python - 对数字列表进行排序

def DiffSort(lst): 
    lstDiff = [None] * len(lst) 
    i = 0 

    while i < len(lst): 
     lstDiff[i] = lst[i] - lst[i-1] if i != 0 else lst[0] 

     if lstDiff[i] < 0: 
      sbj, tmp = lst[i], lstDiff[i] 

      while tmp < 0: 
       i -= 1 
       tmp += lstDiff[i] 
       lst[i+1] = lst[i] 

      lst[i] = sbj 
     else: 
      i += 1 

lst = [13,25,18,122,32,1,0.78,25,85,1,32,56,0.55,0.6,17] 
print(lst) 

DiffSort(lst) 

print(lst) 

任何好?那里是否有类似的方法?

+0

['list'有一个'排序()'方法。(HTTP://文档。 python.org/2/tutorial/datastructures.html#more-on-lists) – Johnsyweb 2013-02-24 22:37:41

+0

聪明,但我认为这只是插入排序,其缺点是它不会对任意可比较的东西(例如字符串,元组等) 。所以它不会超出[timsort](http://en.wikipedia.org/wiki/Timsort),对不起:) – Eevee 2013-02-24 22:43:43

+0

您是否正在寻找通常在Python中对列表进行排序的最佳方式,或者您是否对排序算法的理论? – Junuxx 2013-02-24 22:44:51

回答

0

Is not lst.sort()够好吗?它肯定要比在O(n^2)时间内运行的Python解决方案快得多。

1

list.sort()如果要排序就地列表。

sorted(list),如果你想返回列表的排序的副本。

第二个选项适用于任何类型的可迭代,而首先是名单独占(虽然一些其他类型可以有相同或定义,以及类似的功能,但通常可以想到的是)。

既然你似乎并不在乎它的算法的一部分,这可能是你的兴趣: http://svn.python.org/projects/python/trunk/Objects/listsort.txt

+0

干杯,看起来很有趣。 – 2013-02-24 23:17:06