2013-02-24 5 views
0

그냥 파이썬을 배우고 목록을 정렬하는 주제에 착수했습니다. 삽입과 선택의 두 가지 유형의 알고리즘이 표시되었습니다. 그래서 저는 아이디어를 가지고 이것을 만들었습니다 :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

+0

영리한,하지만이 삽입 정렬, 임의의 comparables (예 : 문자열, 튜플 등) 작동하지 않을 것이라고 단점과 함께 생각합니다. . 그래서 그것은 [timsort] (http://en.wikipedia.org/wiki/Timsort)를 능가하지 않을 것입니다. 미안합니다 :) – Eevee

+0

파이썬에서 일반적으로리스트를 정렬하는 가장 좋은 방법을 찾고 있습니까, 아니면 알고리즘을 정렬 이론? – Junuxx

답변

0

lst.sort()가 충분하지 않습니까? O (n^2) 시간에 실행해야하는 Python 솔루션보다 훨씬 빠릅니다.

1

list.sort() 목록을 현재 위치에서 정렬하려는 경우.

sorted(list) 목록의 정렬 된 복사본을 반환하려는 경우

두 번째 옵션은 모든 반복 가능한 유형에서 작동하지만 첫 번째 옵션은 목록 배타적입니다 (일부 다른 유형은 정의 된 동일하거나 유사한 기능을 가질 수 있지만 일반적으로 기대할 수는 없음). 당신은 그것의 알고리즘 부분에 대해 걱정하는 것 때문에

이 당신에게 관심이있을 수 있습니다 http://svn.python.org/projects/python/trunk/Objects/listsort.txt

+0

건배, 재미있어 보인다. –