2013-07-22 5 views
0

저는 파이썬으로 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 

, thesum0으로 초기화하지 않고, 원래의 배열 뺀

길이 :

재귀 함수를 qsort의 합계를 계산

알아 둘 사항 :

구현중인 알고리즘은 quicksort의 간단한 버전입니다. 목록이있어이 프로그램으로 정렬해야합니다. 전역 변수를 사용하여 알고리즘이 수행해야하는 전체 비교를 나타냅니다.

문제 및 질문

나는 두 가지 방법은 동일합니다 생각하지만 그들은 다른 대답을했다. thesum을 인쇄하여 일부 테스트를 수행 한 후에이 글로벌 변수가 함수 qsort에서 예상대로 작동하지 않는 것으로 나타났습니다. 예를 들어 10 요소 배열을 정렬 할 때 thesum은 9로 초기화되었지만 나중에 8로 인쇄됩니다. 이는 이상합니다. 하지만 왜? 함수에서 전역으로 선언하고 함수 partition에서와 같은 방식으로 사용됩니다. 내가 생각할 수있는 모든 차이점은 qsort이 재귀 함수라는 것입니다. 하지만 그게 어떤 차이가 있습니까? 그래서 전역 변수는 재귀 함수에서 사용되지 않아야합니까?

+1

재귀 호출의 경우이 호출을 매개 변수로 추가하는 것이 좋습니다. 가치가 예상 한 바가 아니기 때문에 아마도 기대하지 않을 것입니다. – Jiminion

+2

전역 및 재귀가 동일한 문장에서 사용되어서는 안됩니다. –

+0

qsort를 처음 호출하기 전에 (방법 2에서) thesum을 업데이트하면 안됩니까? – Jiminion

답변

0

두 가지 방법은 동일한 작업을 수행하지 않습니다.

관련 문제