package exec;
import java.util.Scanner;
/**
问题描述
快速排序是最经常使用的一种排序方式,对于给定的n个数组成的一个数组,请使用快速排序对其进行排序。
现给定一序列,请用快速排序将其按升序排序并输出。
输入格式
第一行一个数N。
第2~N+1行每行一个数,表示给定序列。
输出格式
共N行,每行一个数,表示所求序列。
样例输入
5
1
4
2
3
4
样例输出
1
2
3
4
4
数据规模和约定
共10组数据。
对100%的数据,N<=10^5,所有数均为非负数且在int范围内。
* @author Vivinia
*
* 2018年2月7日
*/
public class C {
static int[] num;
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
num=new int[n];
for(int i=0;i<n;i++)
num[i]=input.nextInt();
input.close();
int start=0,end=n-1;
quictSort(start,end);
for(int i=0;i<num.length;i++)
System.out.println(num[i]);
}
private static void quictSort(int start, int end) {
if(start<end) {
int mid=move(start,end);
quictSort(start,mid-1); //递归左半部分
quictSort(mid+1,end); //递归右半部分
}
}
private static int move(int low, int high) {
int temp=num[low]; //保存标志位数据
while(low<high) {
while(low<high&&num[high]>=temp)
high--;
if(low<high)
num[low++]=num[high];
while(low<high&&num[low]<=temp)
low++;
if(low<high)
num[high--]=num[low];
num[low]=temp;
}
return low;
}
}
暂时的思路是通过递归一半一半的进行快速排序,但是超时。。。