package com.ltl.test;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr = { -9,78,0,23,-567,70,900};
quickSort(arr, 0, arr.length-1);
System.out.println(Arrays.toString(arr));
}
private static void quickSort(int[] arr,int leftIndex,int rightIndex) {
int left=leftIndex;//左下标
int right=rightIndex;//右下标
int mid=arr[(left+right)/2];
//比中间值小的放左边,比中间值大的放右边
while(left<right) {
//在中间值的左边一直找,找到大于等于中间值,退出
while(arr[left]<mid) {
left+=1;
}
//在中间值的右边一直找,找到小于等于中间值,退出
while(arr[right]>mid) {
right-=1;
}
//如果left>=right,说明mid左右两边的值,左边全部小于等于mid,右边全部大于等于mid
if(left>=right) {
break;
}
//交换
int temp=arr[left];
arr[left]=arr[right];
arr[right]=temp;
//如果交换完,发现arr[left]==mid,--前移
if(arr[left]==mid) {
right-=1;
}
//如果交换完,发现arr[right]==mid,++后移
if(arr[right]==mid) {
left+=1;
}
}
//如果左边等于右边,左边++,右边--,否则出现栈溢出
if(left==right) {
left+=1;
right-=1;
}
//向左递归
if(leftIndex<right) {
quickSort(arr, leftIndex, right);
}
//向右递归
if(rightIndex>left) {
quickSort(arr, left, rightIndex);
}
}
}
02-07
2097
01-23
09-26