public class QuickSortDemo {
public static void main(String[] args) {
int[] arr = {12,36,56,44,9,44,18};
sort(arr , 0 , arr.length-1);
System.out.println("排序后:"+Arrays.toString(arr));
}
public static void sort(int[] arr, int left, int right) {
if(arr==null || arr.length==0 || arr.length==1){
return;
}
quickSort(arr, left, right);
}
/**
* 快速排序
* @param arr 排序的数组
* @param left 从左开始的坐标
* @param right 从右开始的坐标
* 递归调用
*/
public static void quickSort(int[] arr, int left, int right) {
//出口条件
if(left>=right){
return;
}
//初始变量
int i = left;
int j = right;
int temp = arr[left];
//移动
while (i<j){
//从右往左
while (i<j && arr[j]>=temp){
j--;
}
//放置元素的点
if(i<j){
arr[i++] = arr[j];
}
//从左往右
while (i<j && arr[i]<=temp){
i++;
}
//放置元素的点
if(i<j){
arr[j--]=arr[i];
}
//移动完毕一轮
System.out.println(Arrays.toString(arr));
}
//分治法
arr[i] = temp;
//在i的左边都比temp小 左
quickSort(arr,left,i-1);
//在i的右边都比temp大 右
quickSort(arr,i+1,right);
}
}