package Sort;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr = {3,5,32,532,1,5,2,4};
System.out.println(Arrays.toString(arr));
Quick(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
//这个方法的参数,arr表示数组,begin和end之间是排序的范围
public static void Quick(int[] arr,int begin,int end){
//当begin和end相等时,表示要排序的只有一个元素,之间return
if(begin>=end){
return;
}
int temp=arr[begin];
int i=begin;//i作为一个向后索引的角标,用来找到比temp大的元素
int j=end;//j作为一个向前索引的角标,用来找到比temp小的元素
while(i!=j){
//这里的思路是,j往前走,直到找到一个小于temp的值,然后i往后走,直到找到一个大于temp的值,然后交换(同时要保证i<j)
//这里一定要先让j往前找,因为这样最后i==j的那个数据一定是j找到的
//这样保证了这个数据可以和temp交换
while(arr[j]>=temp&&i<j){
j--;
}
while(arr[i]<=temp&&i<j){
i++;
}
if(i<j){
int t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
arr[begin]=arr[i];
arr[i]=temp;
//这里用到了递归的思想。
Quick(arr,begin,i-1);
Quick(arr,i+1,end);
}
}