2014-02-08 3 views
0

이 퀵 정렬 알고리즘 구현을 작성했습니다. 이론상 quicksort는 피벗을 사용하여 작동해야하지만 내 코드는 배열을 올바르게 정렬 할 수 없습니다.Quicksort : 알고리즘이 특정 피벗에서만 작동합니다.

내가 피봇으로 알고리즘을 사용하지만 왜 h를 사용하지 않는지 이해할 수 없다. 어떤 생각?

public ArrayList<Integer> sort(ArrayList<Integer> array, int l, int h){ 
    if ((h - l) > 0){ 
     int splitPoint = partition(array, l, h); 
     sort(array, l, splitPoint); 
     sort(array, splitPoint +1, h); 
    } 
    return array; 
} 

public int partition(ArrayList<Integer> array, int l, int h) { 
    int p = h; //with int p = l; the algorithm works 
    Integer pivot = array.get(p); 

    while(l<h) { 
     for (; h>l && array.get(h).compareTo(pivot) >= 0; h--); 
     for (; l<h && array.get(l).compareTo(pivot) < 0; l++); 

     swap(array, l, h); 
    } 
    return h; 
} 
+0

Google에 표시되지 않은 구현의 문제점을 알 수 없습니다. 당신이 잘못한 것을 확실히하기 전에, 우리는 일하는 버전과 일하지 않는 버전을 보여줘야합니다. – RBarryYoung

+0

@RBarryYoung 내 질문을 바꿔 쓰려고했는데 잘못된 코드를 넣었습니다. – drolando

답변

0

기존 알고리즘을 사용할 수 있습니다.

다른 피벗을 선택하려면 partition의 첫 번째 위치로 전환하십시오.

+0

제 질문이 조금 달랐습니다 : 모든 요소를 ​​피벗으로 사용하는 quicksort 알고리즘의 구현을 작성할 수 있습니까? – drolando

+0

예, 방금 당신에게 * 어떻게해야하는지 설명했습니다. –

+0

무엇이 문제입니까? –

관련 문제