vlambda博客
学习文章列表

快速排序+一道练习题

快速排序

先引入几个问题;

  1. 既然它叫快速排序,那么它的时间复杂度?

  2. 为什么它是''不稳定''的?

思路

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);    }}