zoukankan      html  css  js  c++  java
  • 各种排序方法及比较

    内部排序:数据在内存内排序

    外部排序:极为庞大得数据,内存里不能全部容纳,排序时需要访问外存

    排序的稳定性:大小相同的元素排序前后顺序不发生改变

    1.冒泡法

      小的元素或大的元素往后调,属于稳定排序

      改进:1.加flag,若某趟无交换说明已排好,直接return

         2.加postion,记录之前已有序的位置

         3.从两边冒泡

    2.快速排序法

      通常是第一选择

      有序时会退变为冒泡排序

      已某个元素为中间值,选两个哨兵,从两边读数,小于中间值放左边,大于放右边。迭代进行

      改进:1.取头尾中间三值,以大小居中作为中间值

         2.当子序列规模较小时用直接插入排序

      不稳定排序

    3.选择排序法

      选最小的与第一个交换,再选第二小的与第二个交换,再.......

      改进:二元选择排序,每次排最小和最大的放到两边

      不稳定排序

    4.堆排序

      对选择排序的改进

      小顶堆:根结点比左右子树小

      大顶堆:根结点比左右子树大

      不停取出堆顶元素

      分两步:建立小顶堆:从最下面的非叶结点开始,逐渐往上(下面的结点仍需处理)

          调整堆:去除堆顶,将堆底元素置换到堆顶再调整堆

      不稳定排序

    5.插入排序

      一个一个得添加元素并排序,稳定排序。时间复杂度O(n)

      还可以二分插入排序(感觉没什么软用)

    6.希尔排序

      设有123456789,先排15,26,37,48,9,再排1357,2468,9,最后排123456789(这只是特例),希尔排序里有直接插入排序

      不稳定排序

    7.基数排序

      由桶排序衍生而来

      稳定排序

    8.归并排序

      用辅助数组来进行分段后的排序,即有序组A,B,依次放入C

      稳定排序

    当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。

  • 相关阅读:
    JStorm开发经验+运维经验总结
    Storm-166:Nimbus HA solution based on Zookeeper
    Storm实战集锦
    JStorm之Nimbus简介
    BF算法 + KMP算法
    分布式消息系统:Kafka
    分布式服务框架:Zookeeper简介
    修改JSONArray里所有key的值
    JQuery中$.ajax()方法参数详解
    java利用16进制来辨别png格式的图片
  • 原文地址:https://www.cnblogs.com/psymacome/p/7987229.html
Copyright © 2011-2022 走看看