zoukankan      html  css  js  c++  java
  • 排序算法小结

    对于小规模的数据,O(n**2)的排序算法性能可能比O(nlogn)的排序算法更好

    归并排序适合与占用空间比较小的数据集

    在其他语言中,插入排序比冒泡排序更好是因为冒泡排序交换需要3个赋值语句,而插入排序只需要一个

    冒泡排序和插入排序的交换次数都等于逆序度,无论怎么优化,但最好情况的时间复杂度都是O(n)

    归并排序和选择排序的时间复杂度在不同情况下是不会改变的

    线性排序:桶排序、计数排序、基数排序

    桶排序和计数排序比较类似,桶排序适合用于外部排序,即数据量比较大无法一次性加载到内存中时,计数排序适合于数据范围比较小的场景,计数排序可以是稳定排序,通过将计数数组逐位相加,然后从后往前遍历原数组,取出计数数组的值减1作为结果数组中的下标。再将计数数组相应位置值减1,循环以上操作即可保持稳定。

    堆排序没有快速排序好是因为:堆排序的数据访问不友好,不是按序访问的;对于同样的数据,堆排序的交换次数更多,快速排序数据交换次数不会高于逆序度,而堆排序在建堆过程中会打乱数据,使得有序度降低。

    一个通用、高性能的排序函数:

    C中的排序函数是这样实现的:优先使用归并排序,当要排序的数据量比较大的时候,切换为快速排序,分区点的选择使用三数取中法,堆栈溢出问题可通过实现一个堆上的栈,手动模拟递归来解决。当要排序的区间中,元素的个数小于等于4时,会使用插入排序。

  • 相关阅读:
    hdu1403(后缀数组模板)
    输入外挂模板
    hdu2896(ac自动机)
    hdu2222(ac自动机模板)
    codevs1169, 51nod1084(多线程dp)
    codevs3027(dp)
    codevs1068(dp)
    大数乘法模板
    Java锁--框架
    Java并发包--ConcurrentLinkedQueue
  • 原文地址:https://www.cnblogs.com/liushoudong/p/12605860.html
Copyright © 2011-2022 走看看