2017-12-13 14 views
2

빠른 정렬 코드에 문제가 있습니다. 파이썬 (Python 3.6) 코딩에 익숙하지 않다면, 정말 도움이 될 것입니다. Quick Sort 온라인을 여러 번 구현했지만 실제로 코드에 무엇이 잘못되었는지 파악하고 싶습니다. 입력 내용빠른 정렬 코드의 문제점

def Partition(A): 
    q = A[0] 
    i = 1 
    for j in range(1, len(A)): 
     if A[j] < q: 
      A[j], A[i] = A[i], A[j] 
      i = i + 1 
    A[0], A[i - 1] = A[i - 1], A[0] 
    return i - 1 

def QuickSort(A): 
    if len(A) <= 1: 
     return A 
    else: 
     q = Partition(A) 
     QuickSort(A[ : q]) 
     QuickSort(A[q + 1 : ]) 
     return A 

A = [7, 5, 4, 1, 3, 6, 2, 8] 
Sorted = [] 
Sorted = QuickSort(A) 
print(Sorted) 

I 출력 얻고 상기 [2, 5, 4, 1, 3, 6, 7, 8] 대신 오름차순으로 정렬 된 목록을 얻는 : I 아래 내 코드를 붙여하고있다.

QuickSort(A[ : q]) 
    QuickSort(A[q + 1 : ]) 

그들은 뭔가를 반환하지만, 당신은 그들이 돌아 것을 무시, 그래서 그것은 잃어버린 :

+2

무엇이 잘못되었거나 예상되는 결과와 현재 무엇을 얻고 있는지 설명 할 수 있습니까? 코드를 덤핑하고 무엇이 잘못되었는지 묻는 것은 스택 오버 플로우에 대한 주제가 아닙니다. –

+0

@StefanPochmann 제 코드를 도와주세요. –

답변

4

이들은 A복사 부품을 정렬하려고합니다. 당신은 A로 다시 결과를 작성해야 :

A[ : q] = QuickSort(A[ : q]) 
    A[q + 1 : ] = QuickSort(A[q + 1 : ]) 

이 변경 후, 결과는 예상 [1, 2, 3, 4, 5, 6, 7, 8]입니다.

+0

내 댓글 기록을 삭제합니다. 당신은 저에게 이것을 부르면 옳았습니다. 과거에 우리의 공연 토론을 즐겼습니다. 프로그래밍으로 나아가는 것에 대한 문제는 당신이 당신의 사각 지대를 전혀 알지 못한다는 것입니다. 그러나 나는 엔지니어입니다. 궁극적으로 프로그래밍에 대해 내가 아는 모든 것은이 사이트에서 비롯된다. – roganjosh

+0

@roganjosh Heh ... 확실하지 않으므로 프로그래밍을 배우는 가장 좋은 방법입니다 .--). 나는 * 연습 *하고 * 더 * 배우기 위해 여기에 온다. 그러나 예를 들어 내가 최근에 Ruby에 들어갔을 때, 나는 Ruby 초보자의 책을 통해 작업했다. –