2012-03-26 3 views
0

정수 목록을 정렬하는 sort 함수를 만들었습니다.Python의 사용자 정의 정렬 함수에서 잘못된 결과가 발생했습니다.

def sort(list): 
    s = [] 
    dropnum = 0 
    l = len(list) - 1 
    counter = 0 
    s.append(list[0]) 
    while 1: 
     maximum = len(s) 
     if counter == l: 
      break 
     if list[counter] < s[dropnum]: 
      dropnum = dropnum + 1 
     else: 
      counter = counter + 1 
      if dropnum >= maximum: 
       a.append(list[counter]) 
      else: 
       s.insert(dropnum, list[counter]) 
      dropnum = 0 
    return s 
print sort([70,9,24,82,102]) 

내가 출력으로 가야 : 여기 코드입니다

[102,82,70,24,9] 

하지만 얻을 :

[102, 82, 24, 9, 70] 
+1

'reverse (sorted (list)) '를 사용하지 않는 이유는 무엇입니까? 또한 list라는 내장 함수가 있기 때문에 변수 목록의 이름을 지정하면 안됩니다. 이것이 숙제 인 경우 숙제로 표시하십시오. – forivall

+0

왜'sorted()'를 다시 구현합니까? 이 숙제가 있니? – Amber

+4

글쎄,'if dropnum> = maximum :'다음에's.append' 대신'a.append()'가 있습니다. 또한'list'를 변수 이름으로 사용하는 것은 일반적으로 좋지 않습니다. 파이썬에서 내장 객체이기 때문입니다. – Marius

답변

1

난 당신이 이미 알고 확신으로, 파이썬의 내장 sorted() 인 훨씬 더 효율적인 정렬 방법.

print sorted([70,9,24,82,102], reverse=True) 

이 학습 운동을한다 가정 할 때, 나는이 당신이 당신의 모든 카운터 변수가 필요하지 않습니다

def sort(lst): 
    s = [] 
    for item in lst: 
     dropnum = 0 
     while dropnum < len(s) and s[dropnum] > item: 
      dropnum += 1 
     s.insert(dropnum, item) 
    return s 
print sort([70,9,24,82,102]) 

을 무엇을하려고 생각한다면 목록 보통 파이썬을 통해 당신은 루프 방법

for item in lst: # loop through the items in the input 
+0

@agf, 꽤 맞음, 수정 됨 –

0

당신은 쉽게 몇 가지 옵션이 파이썬에 내장 :

list.sort(...) # in-place, more memory efficient 
,

과 :

에 정렬 어떤 멤버 정의

sorted(my_iterable, ...) # returns a new copy 

선택적 부울 reverse 플래그를 가지고있는 모두, 사용자 정의 cmp 비교 기능과 key 나는이 모두 내부적으로 퀵 구현의 변형을 사용 믿는다 (대규모 컬렉션의 경우, 소규모 컬렉션의 경우 단순 반복 알고리즘). Python 버전 2.3 이상에서는 안정적인 정렬이 보장됩니다.

또한 현재 범위에서 네임 스페이스를 오염시키기 때문에 기본 함수 또는 유형 (예 : list)과 동일한 이름의 인수 또는 변수를 지정하면 안됩니다.

관련 문제