2016-10-12 2 views
0

에,이 퀵 알고리즘의 의사 코드는 말한다.퀵 알고리즘은 위키 백과에서 파이썬

def partition(A,lo,hi): 
    pivot = A[hi] 
    i=lo 
    #Swap 
    for j in range(lo,len(A)-1): 
     if (A[j] <= pivot): 
      val=A[i] 
      A[i]=A[j] 
      A[j]=val 
      i=i+1 
     val=A[i] 
     A[i]=A[hi] 
     A[hi]=val 
    return(A,i) 

def quicksort(A,lo,hi): 
    if (lo<hi): 
     [A,p]=partition(A,lo,hi) 
     quicksort(A,lo,p-1) 
     quicksort(A,p+1,hi) 

A=[5,3,2,6,8,9,1] 
A=quicksort(A, 0, len(A)-1) 
print(A) 

ORIGINAL : 오류가 발생하지 않으므로 실수하지 않았습니다.

업데이트 : 이제 무한 재귀가 발생합니다.

답변

2

아무 것도 실행하지 않는 프로그램이 없으므로 오류가 발생하거나 인쇄되지 않습니다. 당신은 메인 프로그램이어야하는 것을 들여 썼고, 이제는 quicksort 함수의 일부가되었습니다.

또한이 코드 은 게시 한 항목에 의견을 남기 셨기 때문에에 오류가 발생합니다. 코드를 정리하고 게시 내용을 수정합니다. 명백한 컴파일 오류가 발생 "여기에 코드를 입력"텍스트 제거

  1. :


    나는 몇 가지 코드 오류를 수정했습니다.

  2. 들여 쓰기가 수정되어 마지막 세 줄이 이제 주 프로그램이되었습니다.
  3. 주 프로그램 호출이 수정되었습니다. quicksort은 배열의 경계 (아래 첨자)를 사용하지만 배열 요소 자체를 전달했습니다.

문제가 해결되었습니다. 반환 값을 제대로 처리하지 않아 무한 재귀가 발생합니다. 또한 주 프로그램이 정렬 된 배열을 삭제합니다. quicksort은 아무 것도 반환하지 않기 때문에 정렬 된 배열이 삭제됩니다. 최종 인쇄 명령문은 없음을 결과로 제공합니다.


주어진 알고리즘을 구현하지 않았습니다. 가장 중요한 문제는 루프의 상한선 인 입니다.

  • 파이썬 루프는 최종 값을 포함하지 않습니다. 주어진 루프는 j 값을 통해 lo에서 len (A) -2까지 실행되므로 목록의 마지막 값은 절대로 다루지 않습니다.
  • 위키 백과에서 주어진 상한선은 목록 끝이 아닌 안녕입니다.

해결하면 해결할 수 있습니다.

또한 인쇄 문을 추적하여 프로그램 작동 방법을 확인할 수 있습니다. 예를 들어, 각 함수의 첫 번째 명령문으로 함수 이름과 입력 매개 변수를 인쇄하십시오.

왜 함수에서 A를 반환합니까?Wikipedia 알고리즘은 그렇게하지 않으며 필요하지 않습니다. 목록을 제 위치에서 변경했습니다. 다시 학습에 당신을 얻을 당신을 추적 할 수있을만큼,이 현재의 문제를 통해 움직이고 있습니까

a, b = b, a 

: 이미 여러 과제에 대해 알고 있기 때문에

, 두 개의 값을 교환하는 쉬운 방법이 있습니다 필요?

+0

그래, 너는 나에게 말한 것을 고칠 때, 꽤 괜찮은 편이라. 첫 번째 배열은 입력이고, 재귀의 끝에서 나는 아무 것도 얻지 못했다. 왜 그런가? –

+0

네, 감사합니다.하지만 지금은별로 좋지 않습니다.[1, 2, 5, 3, 8, 9] -> 재 입력 [1, 2, 5, 3, 8, 9] 8, 9, 6] [1,2,5,3,8,9,6] [1,2,5,3,8,9,6] [1, 2, 5, 3, 8, 9, 6] 없음 ->? 나는 결국 아무 것도 얻지 못하고 제대로 분류하지 못한다는 것을 알지 못한다. –

+0

내 의견에 마지막으로 언급했다. ** quicksort **에는 반환 값이 없습니다. ** 없음 **은 기본 반환 값입니다. 당신의 실수는 그 값을 A에 할당하는 것입니다. 단지 그 문장을 제거하면 최종 산출물을 얻을 수 있습니다. – Prune

관련 문제