基本思想:每次排序的时候设置一个基准点,将小于基准的数全部放到基准点
的左边,将大于基准点的数全部放到基准点的右边
import java.util.Scanner;
public class 快速排序 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int [] a=new int [n];
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
}
//调用
quicklySort(a,0,n-1);
//输出
for(int j=0;j<n;j++) {
System.out.print(a[j]);
}
}
private static void quicklySort(int [] a,int left,int right) {
//判断左边是否大于右边
if(left>right) {
return;
}
int temp=a[left]; //基准数
int i=left;
int j=right;
int t; //交换用的杯子
while(i!=j) {
//如果右边的数大于基准数,则 j--,若不满足条件则交换
while(a[j]>=temp && i<j) {
j--;
}
//如果左边的数小于基准数,则i++,做不满足条件则交换
while(a[i]<=temp && i<j) {
i++;
}
//交换两个数的位置
if(i<j) {
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
//重新给定基准数
a[left] =a[i];
a[i]=temp;
quicklySort(a, left,i-1); //递归,继续处理左边
quicklySort(a,i+1,right); //递归,继续处理右边
return;
}
}