이 퀵 정렬 알고리즘 구현을 작성했습니다. 이론상 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;
}
Google에 표시되지 않은 구현의 문제점을 알 수 없습니다. 당신이 잘못한 것을 확실히하기 전에, 우리는 일하는 버전과 일하지 않는 버전을 보여줘야합니다. – RBarryYoung
@RBarryYoung 내 질문을 바꿔 쓰려고했는데 잘못된 코드를 넣었습니다. – drolando