排序过程:选取一个数,确定其最终位置,左边均大于这个数,右边均小于这个数,然后再对左右两边进行相同
的排序过程。
public void sort(int[] nums){
quickSort(nums,0,nums.length-1);
}
private void quickSort(int[] nums,int left,int right){
if(left >= right || left <0 || right >= nums.length){
return;
}
int start = left;
int end = right;
int token = nums[left];
left ++;
while(left < right){
while(nums[left] < token && left < right){
left ++;
}
while(nums[right] > token && left < right){
right --;
}
exchange(nums,left,right);
}
if(nums[left] > token) {
exchange(nums, start, left - 1);
}else{
exchange(nums,start,left);
}
quickSort(nums,start,left-1);
quickSort(nums,left,end);
}
private void exchange(int[] num,int left,int right){
int temp = num[left];
num[left] = num[right];
num[right]= temp;
}
时间复杂度: 平均O(nlogn) 最好O(nlogn) 最坏O(n^2) 不稳定
代码下载: