定义MySort快速排序函数
public int[] MySort (int[] arr) {
// write code here
//Arrays.sort(arr);
//return arr;
if(arr == null) return null;
quickSort(arr, 0, arr.length - 1);
return arr;
}
写法一:
第一种写法:左边寻找一个比基准大的数,右边寻找一个比基准小的数,交换。
public int[] MySort (int[] arr) {
// write code here
//Arrays.sort(arr);
//return arr;
if(arr == null) return null;
quickSort(arr, 0, arr.length - 1);
return arr;
}
public void quickSort(int[] arr, int start, int end){
if(start >= end) return;
int pivot = arr[start];
int i = start, j = end;
while(i < j){
//注意先取右边
while(i < j && arr[j] >= pivot) j --;
while(i < j && arr[i] <= pivot) i ++;
if(i < j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
arr[start] = arr[i];
arr[i] = pivot;
quickSort(arr, start, i - 1);
quickSort(arr, i + 1, end);
}
写法二:
第二种写法,右边寻找小的,放置在左边,左边寻找个大的,放置在右边
public void quickSort(int[] arr, int left, int right){
if(left >= right) return;
int pivot = arr[left];
int i = left, j = right;
while(i < j){
while(i < j && arr[j] >= pivot) j--;
arr[i] = arr[j];
while(i < j && arr[i] <= pivot) i ++;
arr[j] = arr[i];
}
arr[j] = pivot;
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}