/*
*快速排序思路:
* 1.从列表中取以一个中间的数,然后从左找比他大的数,从右从比他小的数,小的放左边,大的放右边
* 2.然后左右分为2个列表,继续上述操作
*/
package day01;
import java.lang.reflect.Array;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int []arr = {-9,512,68,0,1,5,71,812,14,-5,7};
quickSort(arr,0,arr.length-1 );
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr,int left,int right){
int l = left;
int r = right;
//pivot 中轴值
int pivot = arr[(left+right)/2];
int temp = 0;//临时变量
// while 循环是将小的放左,大的放右
while(1<r){
//在pivot左边一直找
while(arr[l]<pivot){
l +=1;
}
//在pivot的右边一直找
while(arr[r]>pivot){
l -=1;
}
//说明pivot左右2边的值,已经符合要求(左小右大)
if(1>=r){
break;
}
//交换
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
//交换完后,arr[l] == pivot值相等 --前移动
if(arr[l]==pivot){
r -=1;
}
//交换完后,arr[r] == pivot值相等 ++后移动
if(arr[l]==pivot){
l -=1;
}
}
//如果 l==r,必须l++,r--,否则栈溢出
if(l==r){
l +=1;
r -=1;
}
//向左递归
if(left<r){
quickSort(arr,left,r);
}
//向右递归
if(right>l){
quickSort(arr,l,right);
}
}
}
如果有错,欢迎指出。
如果是有不懂的,大家一起探讨。 -----梁氏