zoukankan      html  css  js  c++  java
  • 排序算法的比较

    1.内排序和外排序

    1)内排序:要排序的数据全部放在内存中

    2)外排序:要排序的数据太多,不能同时放在内存中,整个排序过程需要在内存和硬盘之间进行多次数据交换

    2.稳定性

      如果序列中有两个元素相等,排序结束后,能够保证他们原有的相对顺序不变,那这种排序算法就是稳定的。

    3.常见排序算法的稳定性

      稳定:冒泡排序、直接插入排序、归并排序

      不稳定:直接选择排序,希尔排序,堆排序,快速排序

    4.常见算法比较

    5.排序算法适用性比较

    5.1简单排序算法适用性比较

    数据量比较小时,采取简单排序算法:

      直接选择排序和冒泡排序:在比较次数上,两者一样;在交换次数上,冒泡排序在内循环发生交换,而简单选择排序在外循环发生交换;所以整体排序效率高于冒泡排序

      直接插入排序和直接选择排序:比较次数和交换次数均比冒泡和直接选择少,所以直接插入排序效率更高

    5.2改进排序算法适用性比较

    数据量比较大时,采取改进排序算法(时间复杂度低):

      时间复杂度上,但最坏情况下,堆排序和归并排序是O(nlogn),而快速排序为O(n2);平均情况下,三者均为O(nlogn),但是绝大多应用情况下,快速排序最快,归并排序其次,堆排序最慢;

      空间复杂度上,堆排序使用O(1)的空间,归并排序由于递归和需要临时数组要O(n)的空间,快速排序由于递归则需要O(nlogn)~O(n)的空间;

      稳定性上:堆排和快排不稳定,归并排序是稳定的

      堆排序:特别适合数据量特别大的场合,因为快排和归并都是基于递归,大数据量下容易发生栈溢出;

      归并排序:适合被采用在需要稳定性的场景,并且不要求对序列很快地随机访问,所以在链表排序中很适用

      快速排序:优化的快排是公认性能最好的排序,stl的sort函数就是采用优化的快排

  • 相关阅读:
    StringRedisTemplate和RedisTemplate的区别及使用方法
    https jwt.io 测试
    java.sql.SQLException Parameter index out of range (0 1 ).
    yml 错误: 层级、缩进不对引起的问题
    xml文件中存在自定义控件导致无法预览的解决方法
    凸优化从入门到放弃(目录)
    PyTorch从入门到放弃(目录)
    小样本学习以及元学习基础学习路线
    08-ADMM算法
    07-内点法(不等式约束优化算法)
  • 原文地址:https://www.cnblogs.com/Joezzz/p/9664996.html
Copyright © 2011-2022 走看看