zoukankan      html  css  js  c++  java
  • 快速排序

    原理:分治法

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

    代码

    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)  每次都需要比较和交换 类似冒泡排序  每次划分都只能将序列划分为一个元素和其他元素两部

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

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

  • 相关阅读:
    Hack The Box——Traverxec
    Hack The Box——AI
    Hack The Box——Json
    BZOJ1036 树的统计Count
    BZOJ1036 树的统计Count
    BZOJ1036 树的统计Count
    BZOJ1036 树的统计Count
    .net 面试题
    .net 面试题
    .net 面试题
  • 原文地址:https://www.cnblogs.com/Aaron12/p/9565003.html
Copyright © 2011-2022 走看看