首页 > 其他分享 >八大排序一些总结

八大排序一些总结

时间:2024-08-23 19:25:02浏览次数:8  
标签:总结 归并 八大 复杂度 基于 空间 logN 排序

基于比较的排序      时间复杂度       空间复杂度   稳定性
选择排序            O(N^2)          O(1)        无
冒泡排序            O(N^2)          O(1)        有
插入排序            O(N^2)          O(1)        有
归并排序            O(N*logN)       O(N)        有
随机快排            O(N*logN)       O(logN)     无
堆排序              O(N*logN)       O(1)        无


不基于比较的排序    时间复杂度       空间复杂度   稳定性
计数排序            O(N)            O(M)        有
基数排序            O(N)            O(N)        有
 



不基于比较的排序,对样本数据有严格要求,不易改写
基于比较的排序,只要规定好两个样本怎么比大小就可以直接复用
基于比较的排序,时间复杂度极限为O(N*logN)
时间复杂度O(N*logN),空间复杂度低于O(N),且稳定的基于比较的排序是不存在的

一般情况下:
为了绝对的速度选择快排,为了省空间选则堆排,为了稳定性选择归并


归并排序的额外的空间复杂度可以为O(1),可以用归并排序 内部缓存法,但是会变得不再稳定,
所以考虑直接用堆排序
原地归并排序不太行,虽然额外空间复杂度为O(1) , 但是会让时间复杂度变为O(N*2),
所以考虑直接用插入排序
快速排序稳定性改进,"O1 stable sort" , 但是会对样本数据要求更多
 

标签:总结,归并,八大,复杂度,基于,空间,logN,排序
From: https://blog.csdn.net/2401_83010439/article/details/141473054

相关文章

  • cloud compare 学习利用CC代码加快插件开发与总结(三)
    建议看过前面的文章后,再开始本文的学习cloudcompare二次插件化功能开发详细步骤(一)cloudcomparePCA插件开发详细步骤(二)附代码本文完成一个点云变换的插件,同时也是对CC接口的使用做进一步说明,进一步理解CC插件开发流程这个功能在cc已有的功能已经存在,位于edit->app......
  • 年终总结序言
    《声声慢》:寻寻觅觅,冷冷清清,凄凄惨惨戚戚。乍暖还寒时候,最难将息。三杯两盏淡酒,怎敌他、晚来风急?雁过也,正伤心,却是旧时相识。满地黄花堆积。憔悴损,如今有谁堪摘?守着窗儿,独自怎生得黑?梧桐更兼细雨,到黄昏、点点滴滴。这次第,怎一个愁字了得!“怎一个愁字了得?“宋朝女词人李......
  • 组合数学总结
    数学是毒瘤组合数学总结。如果说数论是数学的基础,那么组合数学往后就是高阶了。这之后的数学不再像数论那么板子,而是变得需要更多的推理和组合了。知识很简单,难的是应用。本来还有什么容斥原理,看不懂,于是没放初始化为了方便快速求排列组合,我们需提前预处理阶乘和阶乘的乘法......
  • 从龟速乘到 $Miller-Rabin$ 算法(数论算法总结)
    发现自己竟然菜到不太会龟速乘,所以把\(Miller-Rabin\)算法所需要用到的算法全学了一遍……龟速乘龟速乘是一种\(O(\logn)\)的乘法计算方法。考虑有时普通乘法取模会爆\(long\long\),因此我们考虑用类似快速幂的方式进行乘法运算。intmul(intx,inty,intc){ x%=c,y%=......
  • 每天学习一个基础算法之选择排序
    目录前言:一、选择排序的基本思路和实现方法1、基本思路2、实现方法二、选择排序的执行过程示意图三、选择排序的实现代码选择排序代码主体(以接口函数的形式)测试部分(主函数调用) 四、对选择排序复杂度的分析背景知识:1、选择排序的时间复杂度 精确计算:*采用大O......
  • Day06_0.1基础学习MATLAB学习小技巧总结(6)——矩阵运算篇
    利用暑假的时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。素材来源“数学建模清风”特此说明:本博客的内容只在于总结在使用matlab中的一些小技巧,并非教程,若想系统的学习MATLAB,也可以移......
  • 卡特兰数、Prufer 序列、BSGS 总结
    卡特兰数定义给定\(n\)个\(0\)和\(n\)个\(1\),它们构成一个长度为\(2n\)的排列,满足任意前缀中\(0\)的个数都不少于\(1\)的个数的序列的数量为卡特兰数列。显然\(H_0=H_1=1\)。(\(H\)为卡特兰数列)通项公式:\[H_n=\frac{\dbinom{2n}{n}}{n+1}\quad(n\ge2,n\in\math......
  • 【数据结构】总结二叉树的概念以及存储结构
    目录1.树的概念及结构1.1树的名词定义1.2树的表示2.二叉树的概念及结构 2.1二叉树的概念2.2特殊的二叉树2.2.1满二叉树2.2.2完全二叉树2.3 二叉树的存储结构2.3.1顺序存储2.3.2链式存储3.选择题1.树的概念及结构1.1树的名词定义1.节点的度:......
  • C++:虚函数和虚表详细总结
    一、虚函数(VirtualFunctions)1.定义虚函数是基类中使用virtual关键字声明的成员函数,支持动态多态性。通过基类指针或引用调用虚函数时,会根据实际对象类型选择调用相应的函数实现。2.声明和定义虚函数的声明:classBase{public:virtualvoidshow();//......
  • 交换排序(冒泡排序和快速排序)
    一、基本思想所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置。交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。二、冒泡排序1.核心思想两两相邻的元素进行比较2.动图展示3.代码展示voidSwap(int*......