快速排序

原理:分治法

首先在数组中找到一个基准数(一般第一个),然后将数组中比基准数小的数字移到数组左边,将比基准数大的数字移到数组右边,这样基准数两边的数组相对有序,之后继续对两个数组找出基准数然后移动,直到各分区只有一个数字为止。

代码

public void sort(int[] array,int begin,int end){
    if(begin<end){
        int key=array[begin];
        int i=begin;
        int j=end;
        while(i<j&&array[j]>key){
            j--;
        }
        if(i<j){
            array[i]=array[j];
        }
        while(i<j&&array[i]<key){
            i++;
        }
        if(i<j){
            array[j]=array[i];
        }
        array[i]=key;
        sort(array,begin,i-1);
        sort(array,i+1,end);
    }
}

性能:快速排序不稳定,基准值的比较和交换是跳跃进行的。

平均时间复杂度O(nlogn)

最差时间复杂度O(n^2)  每次都需要比较和交换 类似冒泡排序  每次划分都只能将序列划分为一个元素和其他元素两部

最好的情况,每次均分两部分

模拟排序过程:给个数组模拟排序过程

posted on 2018-08-31 11:44  Aaron12  阅读(158)  评论(0编辑  收藏  举报

导航