package sort; import java.util.*; public class QuickSort { static int arr[]; private void quickSort(int A[],int l,int r){ int s; if(l<r){ s = partition(A,l,r); quickSort(A,l,s-1); quickSort(A,s+1,r); } } private int partition(int A[],int l,int r){ int p = A[l];//以第一个元素为中轴 int i = l+1; int j = r; int temp; while(i<j){ while(A[i]<=p&&i<r)i++; while(p<=A[j]&&j>l)j--; if(i<j){//第一种情况,扫描指针不相交,简单地交换A[i]和A[j] temp = A[j]; A[j] = A[i]; A[i] = temp; display(arr); } }//第二种情况,扫描指针i>=j,交换中轴p与A[j]的位置 if(A[j]<A[l]){//这一判断条件很重要 temp = A[j]; A[j] = A[l]; A[l] = temp; } display(arr); return j; } private void Init(){ Scanner in = new Scanner(System.in); System.out.println("请输入数组的长度:"); int n = in.nextInt(); arr = new int[n]; System.out.println("请输入数组,元素之间以回车或空格隔开:"); for(int i=0;i<arr.length;i++){ arr[i] = in.nextInt(); } in.close(); } private void display(int a[]){ for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } System.out.println(); } public static void main(String[] args) { QuickSort qs = new QuickSort(); qs.Init(); System.out.println("排序过程中,数组的变化情况:"); qs.display(arr); qs.quickSort(arr,0,arr.length-1);//进行快速排序 System.out.println("/n排序后:"); qs.display(arr); } }