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

 

posted on 2019-05-03 15:14  vow007  阅读(4)  评论(0编辑  收藏  举报  来源