[英]QuickSort java implementation
我正在嘗試實現 QuickSort 算法,但在執行時遇到了問題。 我認為問題出在分區方法上,我將數組的第一個元素設為 pivot,並使用一個指針將所有較小的值放在數組的左側,最后將 pivot 放在中間。 謝謝你。
我的輸入是:{42,12,52,1,34,31,0,3} 但我得到:12, 31, 1, 42, 0, 3, 52, 34
public static void quickSort(int[] A) {
quickSort(A, 0, A.length - 1);
}
private static int[] quickSort(int[] A, int low, int high) {
if (low < high) { // if there is still at least 1 element left in the array
int p = partition(A, low, high);
quickSort(A, low, p - 1);
quickSort(A, p + 1, high);
}
return A;
}
private static int partition(int[] A, int low, int high) {
int pointer = low + 1;
int temp = 0;
for (int i = low + 1; i <= high; i++) {
if (A[i] < A[low]) { // if a num is less than pivot, then put to left
temp = A[pointer];
A[pointer] = A[i];
A[i] = temp;
pointer++;
}
temp = A[pointer - 1];
A[pointer - 1] = A[low];
A[low] = temp;
}
return pointer - 1;
}
哦,我明白了,我只需要將我放置 pivot 的代碼部分放在 for 循環之外的中間。
有int pointer = A[high]
並添加int i = (low - 1)
它是較小元素的索引。
void quickSort(int[] A, int low, int high) {
if (low < high) {
int p = partition(A, low, high);
quickSort(A, low, p - 1);
quickSort(A, p + 1, high);
}
}
int partition(int A[], int low, int high) {
int pointer = A[high];
int i = (low - 1);
for (int j = low; j < high; j++) {
if (A[j] <= pointer) {
i++;
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
}
int temp = A[i + 1];
A[i + 1] = A[high];
A[high] = temp;
return i + 1;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.