import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for (int k = 0; k < n; k++) {
arr[k] = scanner.nextInt();
}
quicksort(arr, 0, n - 1);
for (int k = 0; k < n; k++) {
System.out.print(arr[k] + " ");
}
}
public static void quicksort(int[] arr, int l, int r) {
if (l >= r)return;
int x = arr[l + r >> 1], i = l - 1, j = r + 1;
while (i < j) {
do {
i++;
} while (arr[i] < x);
do {
j--;
} while (arr[j] > x);
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
quicksort(arr,l, j);
quicksort(arr, j + 1, r);
}
}
思路:设定 i和j俩个指针分别指向两侧,取数组中间值x;
向右移动i直到arr[i]>x停下,向左移动j直到arr[j]<x;
然后交换arr[i]与arr[j];
重复操作直到i>=j
这时x左侧小于x,x右侧大于x;
再分别向俩边重复此操作,向下递归;