다음은 코드입니다. 출력은 거의 거의 올바르게 정렬 된 배열이지만, 여러 요소가 잘못되어 있습니다. 오류를 발견 할 수있는 사람은 누구입니까?퀵소트 : 거의 정렬되었지만별로는 아닙니다. 뭐가 문제 야?
나는 swap과 quicksort 방법이 정확하다는 것을 확신하지만, 여기에 모든 방법을 게시하고있다.
package quicksort;
import java.util.Random;
import java.util.Arrays;
public class QuickSort {
/**
* @param args the command line arguments
*/
private static int[] u;
public static void main(String[] args) {
u = makeArray(100);
System.out.println(Arrays.toString(u));
quicksort(0, u.length - 1);
System.out.println(Arrays.toString(u));
}
public static int[] makeArray(int n) {
int[] a = new int[n];
int j;
Random r = new Random();
for (int i = 0; i < n; i++) {
j = (r.nextInt(100) + 1);
a[i] = j;
}
return a;
}
public static int partition(int left, int right, int pivot) {
int p = pivot; // pivot
int lPt = left - 1;
int rPt = right + 1;
while (true) {
while ((lPt < right) && (u[++lPt] < p));
while ((rPt > left) && (u[--rPt] > p));
if (lPt >= rPt) {
break;
} else {
swap(lPt, rPt);
System.out.println("Swapping " + lPt + " " + rPt);
}
}
return lPt;
}
public static void swap (int a, int b) {
int temp = u[a];
u[a] = u[b];
u[b] = temp;
}
public static void quicksort(int l, int r) {
if (r - l <= 0) {
return;
} else {
int part = partition(l, r, u[l]);
quicksort (l, part - 1);
quicksort (part + 1, r);
}
}
}
답변 됨. 시간과 명확한 설명을 해주셔서 너무 감사드립니다. 조금 당혹스러워서 원래 코드의 위치가 아니라 피벗 값으로 전달했습니다. – ACPrice