快速排序+一道练习题
快速排序
先引入几个问题;
既然它叫快速排序,那么它的时间复杂度?
为什么它是''不稳定''的?
思路
1.从数列中挑出一个元素,称为 "基准"(pivot)
2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区操作;
3.递归地把小于基准值元素的子数列和大于基准值元素的子数列排序;
光说不练假把戏,上题:
描述
给定一个数组,请你编写一个函数,返回该数组排序后的形式。
示例1
输入:
[5,2,3,1,4]
返回值:
[1,2,3,4,5]
示例2
输入:
[5,1,6,2,5]
返回值:
[1,2,5,5,6]
import java.util.*;
public class Solution {
public int[] MySort (int[] arr) {
// write code here
quicksort(arr,0,arr.length-1);
return arr;
}
private void quicksort(int[] arr,int left,int right){
if(left>=right){return;}
int L = left;
int R = right;
int pivot = arr[left];
while(left<right){
while(left<right&&arr[right]>=pivot){
right--;
}
arr[left] = arr[right];
while(left<right&&arr[left]<=pivot){
left++;
}
arr[right] = arr[left];
}
arr[left] = pivot;
quicksort(arr,L,left);
quicksort(arr,left+1,R);
}
}