zoukankan      html  css  js  c++  java
  • 数据结构与算法简记--排序算法(3) -排序优化

    如何选择排序

    • 小规模用插入排序
    • 大规模用快速排序
    • 通用用快速排序
    • 特殊场景用桶排序、计数排序、基数排序

    为什么用快速排序不用归并排序

    • 归并排序虽然在最坏情况下时间复杂度为O(nlogn),比快速排序好,但不是原地排序,空间复杂度过高,意味着耗费较多内存
    • 快速排序在最坏情况下时间复杂度为O(n2),可以通过优化来避免复杂度恶化:

    优化快速排序主要在于合理分区

    • 三数取中,五数取中
    • 随机数

    通用排序

    • glibc.qsort

    空间换时间:qsort() 会优先使用归并排序来排序输入数据

    数据规模较大时:使用快速排序,三数取中法分区

    O(n2) 不一定比 O(nlogn) 差:元素小于4时,使用插入排序

    • java1.8中的排序

    在元素小于47的时候用插入排序

    大于47小于286用双轴快排

    大于286用timsort归并排序,并在timesort中记录数据的连续的有序段的的位置,

    若有序段太多,也就是说数据近乎乱序,则用双轴快排

    当然快排的递归调用的过程中,若排序的子数组数据数量小,用插入排序

  • 相关阅读:
    Eclipse
    Android View Attributes
    Android Virtual Device
    Bootstrap
    Nginx常用命令
    [多线程]多线程(Thread、Runnable、Callable)
    Redis、MongoDB及Memcached的区别
    Linux将某目录授权给某组里的某用户
    CentOS修改locale解决调用API乱码问题
    MyBatis与Hibernate的区别?
  • 原文地址:https://www.cnblogs.com/wod-Y/p/11968922.html
Copyright © 2011-2022 走看看