这个排序我还是不理解,先把它记录下来,对于递归的思想我的觉悟还不够呀。
package QuickSort;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int arr[]={-9,78,0,23,-567,70};
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;
int temp=0;
int pivot=arr[(l+r)/2];
while(l<r){ // 只要左边的索引小于右边的索引 就一直循环
while(arr[l]<pivot){
l+=1;
}
while(arr[r]>pivot){
r-=1;
}
if (l>=r){
break;
}
temp=arr[l];
arr[l]=arr[r];
arr[r]=temp;
// 如果交换完后,发现左边的arr[l]=pivot , 就让r--后移
if (arr[l]==pivot){
r-=1;
}
if (arr[r]==pivot){
l+=1;
}
}
// 防止 栈溢出
if(l==r){
l+=1;
r-=1;
}
// 分割左边,知道为1 保证左右两边为有序的
if (left<r){
quickSort(arr, left, r);
}
if (right>l){
quickSort(arr, l, right);
}
}
}
static void sort(int []arr,int begin,int end){
if (begin>end){
return;
}
int left=begin; //左指针
int right=end; // 右指针
// 基准数总是指向第一个数
int temp=0;
while (left!=right){
// 先让左边的指针先移动,因为左指针指向的值是初始的基准数值
while (left<right&&arr[right]>arr[begin]){
right--;
}
while (left<right&&arr[left]<=arr[begin]){
left++;
}
// 当出来的时候,代表两个值需要互换
if (left<right){
temp=arr[left];
arr[left]=arr[right];
arr[right]=temp;
}
}
// 此时出来代表已经处理完了第一轮的基准数分割
// 还需要将基准数的位置进行放置
temp=arr[begin];
arr[begin]=arr[left];
arr[left]=temp;
sort(arr,left+1,end);
sort(arr,begin ,left-1);
}
}