0
파이썬에서 모든 정렬 알고리즘의 반복적이고 재귀적인 버전을 작성하려고합니다. 나는 아무것도 돌려주지 않는다는 사실 외에 무엇이 잘못 되었습니까? 제 슬라이싱에 문제가 있습니까? 솔루션에서재귀 삽입 파이썬에서 정렬
시도 :
def insertOne(element, aList):
''' Inserts element into its proper place in a sorted list aList.
input: element is an item to be inserted. aList is a sorted list.
output: A sorted list.
'''
if len(aList) == 0:
return [element]
elif element < aList[0]:
return [element] + aList
else:
return aList[0:1] + insertOne(element, aList[1:])
def sort(aList):
if len(aList) == 0:
return []
n = len(aList)
if n > 1:
sort(aList[:n - 1])
insertOne(n, aList)
aList = [3,2,1]
print sort(aList)
가장 먼저 들여 쓰기가 잘못되었습니다. 파이썬은 들여 쓰기를 사용하여'if'와'for'와 같은 여러 줄 문장의 경계를 결정합니다; 이 코드는 줄 1에서 IndentationError와 함께 실패합니다. – user2357112
두 번째 문제점은 내부 작업과 새 목록을 반환하는 작업이 혼합되어 있다는 것입니다. 'aList [: n - 1]'은'aList'로부터 생성 된 새로운 독립적 인리스트입니다; 그것을 정렬해도'aList'에 전혀 영향을 미치지 않습니다. 비슷하게,'insertOne'에서 무엇인가를 반환해도'aList'의 값에는 영향을 미치지 않습니다. – user2357112
세 번째 문제는'insertOne'가 삽입 할 원소와 정렬 된 서브리스트를 삽입해야하지만,'insertOne (n, aList)'는 인덱스와 원하는 원소를 이미 포함하고있는 부분적으로 정렬 된리스트를 전달한다는 것입니다 삽입 할. – user2357112