用传统的快速排序,由于后面的数据量过大会导致递归的时候栈溢出。所以需要改进下。
每次把要排序的数据分成两半,使其左边一半小于等于key,右边一半大于等于key(key是数组中的一个数,可以随机抽取),这样,只需要log2n次就可以处理完,每次遍历一次数组,总体复杂度nlog2n。
package _5_21;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int []a;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
a= new int[n];
for(int i=0;i<n;i++) {
a[i] = sc.nextInt();
}
sort(0,n-1);
for(int i=0;i<n;i++) {
if(i==n-1) {
System.out.println(a[i]);
}else {
System.out.print(a[i]+" ");
}
}
}
private static void sort(int l, int h) {
// TODO Auto-generated method stub
int i = l;
int j = h;
int k = a[(l+h)/2];
while(i<=j) {
while(a[j]>k) {
j--;
}
while(a[i]<k) {
i++;
}
if(i<=j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
i++;j--;
}
}
if(l<j) sort(l,j);
if(i<h) sort(i,h);
}
}
嗯,哭死在厕所就可以了