2016-06-16 3 views
0

몇 시간 동안 첫 번째 빠른 정렬 알고리즘을 작성하려고하지만 여전히 제대로 표시되지 않습니다. 목표는 배열을 정렬하기위한 빠른 정렬 코드를 작성하는 것입니다. 재귀 함수 quick_sort와 파티션 함수의 두 가지 함수를 사용하고 싶습니다.첫 번째 파티션 이후에 빠른 정렬이 작동하지 않습니다.

나누기 및 정복으로 생성 된 각 하위 배열에서 파티션 함수가 올바르게 작동하는 것처럼 보였으 나 반환 된 전체 배열은 첫 번째 파티션 (첫 번째 파티션이 효과가있는 반면 두 번째, 세 번째 파티션 , ..., 아무 효과가없는 것처럼 보였다).

나는 여기에서 무엇인가 놓쳤을 것임에 틀림 없었다, 어떤 힌트라도 필요로 하느냐? 당신이 다시 첫 번째 반복을 잡아 줄께 quicksort(a)를 호출하기 때문에 모든 첫 번째 반복으로 낮고 높은 설정 기원전

def partition(a, first, last):  
    x = a[0] 
    j = 0 

    for i in range((first+1), (last+1)): 

     if x >= a[i]: 
      j = j + 1 
      a[i], a[j] = a[j], a[i]  
    a[0], a[j] = a[j], a[0] 

    return j 

def quicksort(a): 
    quick_sort(a, 0, len(a) - 1) 

def quick_sort(a, first, last): 

    if first < last:  
     j = partition(a, first, last) 
     # devide a into two parts and do quicksort respectively 
     quicksort(a[:j]) 
     quicksort(a[j+1:]) 

    return a 

a = [6.5, 4, 2, 3, 9, 8, 9, 4, 7, 6, 1] 
quicksort(a) 
+1

[: j]는 다른 배열이고, a 부. quicksort (a, first, j), quicksort (a, j + 1, last)를 사용해야합니다. – UmNyobe

+0

정확히 내가 놓친 곳입니다! 고마워요 UmNyobe – enaJ

답변

2

quicksort(a[:j]) 
quicksort(a[j+1:]) 

quick_sort(a,first,j-1) 
quick_sort(a,j+1,last) 

를 들어 교체 시간을 유지하기 위해 j를 사용하여 재귀를 호출해야합니다

관련 문제