快排之单项扫描法
实际上就是利用递归、分治的思想将该数组不断进行划分排序。
每一次划分,都保证pivot左边都是小于它的数,右边都是大于它的数。
这样不断递归,确定每个位置上的pivot都符合要求,即可得到最终的结果。
static int[] QuickSort(int[] arr, int p, int r){
if(p<r){
int q = partition(arr,p,r);
QuickSort(arr,p,q-1);
QuickSort(arr,q+1,r);
}
return arr;
}
static int partition(int[] arr,int p,int r){
int pivot = arr[p];
int left = p+1;
int right = r;
int temp;
while (left<=right){
if(arr[left] <= pivot){
left++;
}else{
if(arr[left] == arr[right]){
}else{
temp = arr[right];
arr[right] = arr[left];
arr[left] = temp;
}
right--;
}
System.out.println(Arrays.toString(arr));
}
temp = arr[p];
arr[p] = arr[right];
arr[right] = temp;
return right;
}