快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据要小,再按这种方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,使整个数据变成有序序列。
package day11;
import java.util.Arrays;
public class qulcklysort {
public static void main(String[] args) {
int [] arr ={22,-1,10,-12,-2};
quicksort(arr,0,arr.length-1);
System.out.println("arr="+ Arrays.toString(arr));
}
// 快速排序法
public static void quicksort(int[] arr,int left,int right){
int l =left;
int r =right;
//pivot支点,中轴
int pivot =arr[(l+r)/2];
int temp=0;
//while让比pivot大的放在右,小的放在左
while (l<r){
// 左边
while (arr[l]<pivot) {
// 当左边的大于中间值
l++;
}//退出的时候表示右边的值小于中间值 要准备交换
while (arr[r]>pivot){
r--;
}
// 说明左右两边的值都已经交换结束了
if (l>=r){
break;
}
//退出的时候表示右边的值大于中间值 要准备交换
//当找到一个左边的值和右边的值的时候交换
temp=arr[l];
arr[l]=arr[r];
arr[r]=temp;
// 如果交换完后发现arr[l]= pivot 说明中间数的位置改变了,左边的值比原先多了一个所以要把中间值向后移一个
// 即把右边的值向右移动一个
if (arr[l]==pivot){
r--;
}
// 右边同理,将左边的值向左移动
if (arr[r]==pivot){
l++;
}
}
}
}