저는 파이썬으로 quicksort 프로그램을 작성했습니다. 여기에 사용 된 총 비교를 계산하는 것이 목표입니다. 나는 thesum
이라는 전역 변수를 선언했다. 파티션 기능에서 thesum
을 사용할 때 thesum
을 올바르게 계산할 수 있습니다. 그러나 재귀 함수에서 합계를 계산하려고 시도했을 때 잘못된 답을 제공했습니다. 여기에 각각 한 일입니다Python 전역 변수가 재귀 함수에서 작동하지 않습니다
방법 1 :
파티션 함수의 합 계산 : 내가 사용 파티션 알고리즘에서
def partition(listToSort, start, end):
global thesum
thesum = thesum+end-start
을, 나는 m-1을 추가해야 m 길이 배열을 분할 할 때.
방법 2 :이 방법
def qsort(listTo, start, end):
if start >= end :
return
else:
index = partition(listTo, start, end)
qsort(listTo, start, index-1)
global thesum
thesum = thesum + index-1-start
qsort(listTo, index+1, end)
thesum = thesum + end-index-1
, thesum
가 0
으로 초기화하지 않고, 원래의 배열 뺀
재귀 함수를 qsort의 합계를 계산
알아 둘 사항 :
구현중인 알고리즘은 quicksort의 간단한 버전입니다. 목록이있어이 프로그램으로 정렬해야합니다. 전역 변수를 사용하여 알고리즘이 수행해야하는 전체 비교를 나타냅니다.
문제 및 질문
나는 두 가지 방법은 동일합니다 생각하지만 그들은 다른 대답을했다. thesum
을 인쇄하여 일부 테스트를 수행 한 후에이 글로벌 변수가 함수 qsort
에서 예상대로 작동하지 않는 것으로 나타났습니다. 예를 들어 10 요소 배열을 정렬 할 때 thesum
은 9로 초기화되었지만 나중에 8로 인쇄됩니다. 이는 이상합니다. 하지만 왜? 함수에서 전역으로 선언하고 함수 partition
에서와 같은 방식으로 사용됩니다. 내가 생각할 수있는 모든 차이점은 qsort
이 재귀 함수라는 것입니다. 하지만 그게 어떤 차이가 있습니까? 그래서 전역 변수는 재귀 함수에서 사용되지 않아야합니까?
재귀 호출의 경우이 호출을 매개 변수로 추가하는 것이 좋습니다. 가치가 예상 한 바가 아니기 때문에 아마도 기대하지 않을 것입니다. – Jiminion
전역 및 재귀가 동일한 문장에서 사용되어서는 안됩니다. –
qsort를 처음 호출하기 전에 (방법 2에서) thesum을 업데이트하면 안됩니까? – Jiminion