나는 내가 사용하고있는 코드를 포함시켰다.병합 정렬, 하위 목록은 어디에 저장됩니까?
단일 값이있을 때까지 코드 시작으로 하위 목록이 계속 분할된다는 것을 알고 있습니다. 단일 값은 lefthalf 및 righthalf 변수에 저장되고 정렬 된 순서로 병합됩니다.
두 코드의 두 목록을 병합하는 방법은 무엇입니까? 알겠지만이 하위 목록은 alist라고하는 별도의 로컬 변수에 저장됩니다. 어떻게 병합됩니까?
def mergeSort(alist):
if len(alist)>1:
mid = len(alist)//2
lefthalf = alist[:mid]
righthalf = alist[mid:]
mergeSort(lefthalf)
mergeSort(righthalf)
i=0
j=0
k=0
while i < len(lefthalf) and j < len(righthalf):
if lefthalf[i] < righthalf[j]:
alist[k]=lefthalf[i]
i=i+1
else:
alist[k]=righthalf[j]
j=j+1
k=k+1
while i < len(lefthalf):
alist[k]=lefthalf[i]
i=i+1
k=k+1
while j < len(righthalf):
alist[k]=righthalf[j]
j=j+1
k=k+1
"단일 값은 lefthalf 및 righthalf 변수에 저장됩니다"는 의미는 무엇입니까? 'lefthalf'와'righthalf'는리스트입니다. 'lefthalf = alist [: mid]'는'alist'의 왼쪽 절반의 복사본을 만들어 lefthalf로 저장합니다. 'righthalf'와 유사하게. 그런 다음 두 개의 하위 목록을 정렬하는 재귀 호출이 발생합니다. –
모든 로컬 배열의 공간은 힙 (스택이 아님)에서 할당된다고 가정합니다. 이것은 두 번째 배열의 한 번 할당을 수행하고 두 배열간에 앞뒤로 병합하여 피할 수 있습니다 (위 또는 아래 위로 병합 정렬을 통해 수행 할 수 있음). – rcgldr