update quick sort

This commit is contained in:
2020-10-01 21:42:54 +08:00
parent e34a9915a0
commit 95fcbf7d57

View File

@@ -16,7 +16,7 @@ import java.util.Arrays;
*/ */
public class QuickSort { public class QuickSort {
public static void main(String[] args) { public static void main(String[] args) {
int[] arr = {4, 9, 1, 6, 8, 2}; int[] arr = {4, 9, 1, 8, 6, 2};
sort(arr, 0, arr.length - 1); sort(arr, 0, arr.length - 1);
} }
@@ -47,26 +47,23 @@ public class QuickSort {
int i = l, j = r, int i = l, j = r,
// 一般选择数组左边界作为基准 // 一般选择数组左边界作为基准
k = l; k = l;
int p = arr[k];
while (l < r) { while (l < r) {
// 首先循环递减右边界,直到找到小于基准的元素,相互交换 // 首先循环递减右边界,直到找到小于基准的元素,相互交换
while (l < r && arr[r] >= p) { while (l < r && arr[r] >= arr[k]) {
r--; r--;
} }
arr[k] = arr[r]; swap(arr, k, r);
k = r; k = r;
// 其次循环递增左边界,直到找到大于基准的元素,相互交换 // 其次循环递增左边界,直到找到大于基准的元素,相互交换
while (l < r && arr[l] <= p) { while (l < r && arr[l] <= arr[k]) {
l++; l++;
} }
arr[k] = arr[l]; swap(arr, k, l);
k = l; k = l;
// 循环以上步骤,直到 l 和 r 相遇 // 循环以上步骤,直到 l 和 r 相遇
} }
arr[k] = p; // arr[k] = p;
System.out.println("Sorting: " + Arrays.toString(arr)); System.out.println("Sorting: " + Arrays.toString(arr));
sort(arr, i, k - 1); sort(arr, i, k - 1);