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)的排序方法:快速排序、堆排序或归并排序序。

  • 相关阅读:
    算法学习-顺序查找
    EF框架中Attach与Entry
    EntityFramework更新实体绑定实体字段简便方法
    C# 快速写入本地文件
    Vue 3.0初探
    二维管线生成三维管线,转换3DTiles 思路
    Civil3d中 如何用管轴线的变坡点桩号控制其他纵断面数据的显示?
    jupyter
    jenkins
    ambari
  • 原文地址:https://www.cnblogs.com/psymacome/p/7987229.html
Copyright © 2011-2022 走看看