2017-01-29 4 views
-2

내장 함수가없는 파이썬으로 삽입 정렬 프로그램을 만들려고합니다. 유일한 문제는 내 프로그램이 목록의 첫 번째 항목 만 정렬한다는 것입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?삽입 정렬 기능이 내장되지 않음

내 정렬

 def insertionsort(list1): 
     for index in range(len(list1)): 
      value = list1[index] 
      position = index 
      while position > 0 and list1[position-1] > value: 
       list1[position]=list1[position-1] 
       position = position-1 
      list1[position] = value 
      return(list1) 

예제 출력

목록 = [3,1,5,2]

출력 = [1,3,5,2]

+1

삽입 정렬 예제는 거의 모든 Python 텍스트 북 (예 : Liang)에서 찾을 수 있습니다. 그러한 질문을하는 것은 수치 스럽습니다. – DyZ

+0

정확하게 기억한다면이 질문은 한 시간 전에 묻지 않았습니다 ... –

답변

1

수정 들여 쓰기는 다음과 같습니다. (반환 값은 루프 외부에 있어야합니다)

def insertionsort(list1): 
    for index in range(len(list1)): 
    value = list1[index] 
    position = index 
    while position > 0 and list1[position-1] > value: 
     list1[position]=list1[position-1] 
     position = position-1 
    list1[position] = value 
    return(list1) 


aList = [3, 1, 5, 2] 

aList = insertionsort (aList) 
print (aList) 

그리고 실제로, 당신이 어디를 찾을 수 있습니다

https://interactivepython.org/runestone/static/pythonds/SortSearch/TheInsertionSort.html

+0

또한 '돌아 가기'를 제거 할 수 있습니다. 즉, 내부 정렬을 수행하기 때문입니다. – schwobaseggl

+0

오른쪽. 그러나 그때 그것은 링크 (정확히는 var 이름 제외)와 같습니다 ... –

+0

그 안에 아무 수치가;) 당신은 소스를 인용했다. – schwobaseggl

0

코드의 조각을 시도해보십시오

def insertionSort(alist): 
    for index in range(1,len(alist)): 

    currentvalue = alist[index] 
    position = index 

    while position>0 and alist[position-1]>currentvalue: 
     alist[position]=alist[position-1] 
     position = position-1 

    alist[position]=currentvalue 


alist = [3,1,5,2] 
insertionSort(alist) 
print(alist) 

을 나는 그것이 도움이되기를 바랍니다.

+0

제대로 의도하지 않았습니다 ... –

1

먼저 삽입 정렬에서 첫 번째 요소가 정렬되어 있다고 가정합니다. 따라서 첫 번째 요소의 목록에서 반복을 시작합니다. 두 번째로 여기에 범위 기능이 사용 중입니다. range (4)는 0-3부터 시작하는 숫자를 포함하며 4는 제외됩니다. 코드에서 요구하는 수정 사항은 범위 함수를 아래의 방식으로 사용해야한다는 것입니다. 범위의 인덱스 (1, len (list1))에 대해 (len (list1) 범위의 인덱스 대신) return 문은 들여 쓰기가 완료되면 기능 코드 실행이 중지되므로 for 루프가 해당 작업을 완료 한 경우에만 반환 문을 들여 쓰기해야합니다. 정렬 기능은 다음과 같이 요약됩니다. 또 다른 제안 help.It을 요청하기 전에 코드의 드라이 런을 시도하는 것입니다

def insertionsort(list1): 
    for index in range(1,len(list1)): 
     value = list1[index] 
     position = index 
     while position > 0 and list1[position-1] > value: 
      list1[position]=list1[position-1] 
      position = position-1 
     list1[position] = value 
    return(list1) 

은 당신이 당신의 자신에 해결하고 자신을 위해 더 나은 개념을 만들 수있는 작은 문제를 피할 수 있습니다.

건배 .. !!