import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextInt();
int [] arr=new int [n];
for(int i=0;i<n;i++)
arr[i]=in.nextInt();
sort(arr, 0, arr.length - 1);
print(arr);
}
public static void sort(int arr[], int low, int high) {
int l = low;
int h = high;
int k = arr[low];
while (l < h) {
// 从后往前比较
while (l < h && arr[h]>=k){
h--;// h=6
}
if (l < h) {
int temp = arr[h];
arr[h] = arr[l];
arr[l] = temp;
//进行过一次替换后,没必要将替换后的两值再次比较,所以i++直接下一位与k对比
l++;
}
// 从前往后比较
while (l < h && arr[l] <= k) {
// 如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置
l++;
}
if (l < h) {
int temp = arr[h];
arr[h] = arr[l];
arr[l] = temp;
h--;
}
}
// 递归
if (l > low)
//先判断l>low再次经行左边排序
sort(arr, low, l - 1);
if (h < high)
//左边依次排序执行完递归后,弹栈进行右边排序
sort(arr, l + 1, high);
}
// 打印数组的方法
private static void print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (i != (arr.length - 1)) {
System.out.print(arr[i] + " ");
} else {
System.out.print(arr[i]);
System.out.println();
}
}
}
}
测试:
6
1 3 2 4 6 5
输出:
1 2 3 4 5 6