各种排序方法的比较


      简单排序包括直接插入排序、冒泡排序、和简单选择排序。


         排序方法的稳定性:假设Ki=Kj(1<=i<=n,1<=j<=n,i!=j),若在排序前的序列中Ri领先于Rj(即i<j),经过排序后得到的序列中Ri领先于Rj,则称所用的排序方法是稳定的;反之,当相同的关键字的领先关系在排序过程中发生变化,则称所用的排序方法是不稳定的。

     证明一种排序方法是稳定的,要从算法本身的步骤中加以证明。证明排序方法是不稳定的,只需给出一个反例说明。

     在多数情况下,排序是按记录的主关键词进行的,此时不必考虑排序方法的稳定性。如果排序是按记录的次关键词进行的,则应充分考虑排序方法的稳定性。

1、简单排序法一般只用于n比较小的情况(例如n<30)。当序列中的记录“基本有序”时,直接插入排序是最佳的排序方法。如果记录中的数据较多,则应采用移动次数较少的简单选择排序法。

2、快速排序、堆排序和归并排序的平均时间复杂度均为O(nlog2 n),但实验结果表明,就平均时间性能而言,快速排序是所有排序方法中最好的。遗憾的是,快速排序在最坏的情况下的时间性能为O(n^2)。堆排序和归并排序的最坏时间复杂度仍为O(nlog2 n),当n比较大时,归并排序的时间性能优于堆排序,但他所需的辅助空间最多。

3、可以将简单排序法与性能比较好的排序方法结合使用。例如,在快速排序中,当划分子区间的长度小于某值时,可以转而调用直接插入排序法;或者先将待排序序列划分成若干个序列,分别进行直接插入排序,然后再利用归并排序法,将有序子序列合并成一个完整的有序序列。

4、基数排序的时间复杂度可以写成O(dn)。因此,它最适用于n值很大而关键字的位数s较小的序列。当d远小于n时,其时间复杂度接近于O(n)。

5、从排序的稳定性上看,在所有简单排序法中,简单选择排序是不稳定的,其他各种简单排序法都是稳定的。然而,在那些时间性能较好的排序方法中,希尔排序,快速排序、堆排序都是不稳定的,只有归并排序、基数排序是稳定的。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生命很短,我用tldr

我们平时使用命令的时候&#xff0c;如果忘记的或者不知道这个命令如何使用&#xff0c;然后你就会去百度&#xff0c;也会去使用man 或者 -- help 查看&#xff0c;但是看到的一般都是长篇大论。如果你看了这篇文章&#xff0c;就会知道tldr是怎么样的存在。tldr 的含义TL;DR …

Linux安装vsftpd

卸载vsftpd sudo yum remove vsftpd 安装vsftpd sudo yum -y install vsftpd 创建一个文件夹用来当作ftp得仓库 cd / sudo mkdir ftpfile 创建一个用户,仅对文件夹有上传权限,又没有登陆权限 sudo useradd ftpuser -d /ftpfile/ -s /sbin/nologin//赋值权限sudo chown -R ftpus…

EJB 学习笔记

1、ejb 基础知识&#xff08;1&#xff09; 无状态会话bean不保存客户机的会话状态优点&#xff1a;使用小量的实例即可满足大量的客户。每个实例都没有标识&#xff0c;相互之间是等价的。等?的无状态会话bean&#xff1a; 多次和一次调用的结果和效应相同。在集群中可以…

C语言——项目规范

C语言——项目规范 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 //基本原则 1、尽量少使用全局变量&#xff0c;或者说禁止使用全局变量&#xff1b; 2、实在要在其他文件使用本文件中的变量&#xff0c;以函数接口返回其值&#xff0c;在其他文件…

折半查找判定树及平均查找长度

折半查找判定树及平均查找长度 从折半查找的过程看&#xff0c;以有序表的中间记录作为比较对象&#xff0c;并以中间记录将表分割为两个子表&#xff0c;对子表继续上述操作。所以&#xff0c;对表中每个记录的查找过程&#xff0c;可用二叉树来描述&#xff0c;二叉树中的每个…

华为开始对嵌入式开发者下手了!

5G时代到来&#xff0c;物联网技术的应用也离我们越来越近。智慧交通、智能家庭、智慧园区&#xff0c;越来越多的融入到我们的生活当中。作为物联网重要技术组成的嵌入式系统&#xff0c;嵌入式系统视角有助于深刻地、全面地理解物联网的本质。而物联网是通用计算机的互联网与…

慎用Hyper-Threading Technology

今天&#xff0c;一个同事遇到了一个非常奇怪的问题&#xff0c;他的程序&#xff08;C#&#xff09;运用了Hyper-Threading技术&#xff0c;系统用的是Windows 2000 SP4&#xff0c;当程序运行时会随机的抛出一个异常&#xff0c;而且这个bug很不容易reproduce&#xff0c;最后…

BZOJ1876 [SDOI2009]SuperGCD 【高精 + GCD优化】

题目 Sheng bill有着惊人的心算能力&#xff0c;甚至能用大脑计算出两个巨大的数的GCD&#xff08;最大公约 数&#xff09;&#xff01;因此他经常和别人比 赛计算GCD。有一天Sheng bill很嚣张地找到了你&#xff0c;并要求和你比 赛&#xff0c;但是输给Sheng bill岂不是很丢…

二叉排序树和平衡二叉排序树

二叉排序树又称为二叉查找树&#xff0c;它是一颗特殊的二叉树。&#xff08;空树&#xff09; 性质&#xff1a;1、若它的左子树非空&#xff0c;则左子树上的所有结点的值均小于根结点的值。 2、若它的右子树非空&#xff0c;则右子树上的所有结点的值均大于根结点的值。 3、…

C语言九阳神功

C语言笔记(九阳神功) 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 1.static的作用&#xff1a; &#xff08;1&#xff09;在函数体内&#xff0c;一个被声明为静态的变量在这一函数被调用过程中维持其值不变&#xff08;该变量存放在静态变量区&…

FUSE文件系统

Fuse(filesystem in userspace),是一个用户空间的文件系统。通过fuse内核模块的支持&#xff0c;开发者只需要根据fuse提供的接口实现具体的文件操作就可以实现一个文件系统。由于其主要实现代码位于用户空间中&#xff0c;而不需要重新编译内核&#xff0c;这给开发者带来了众…

myeclipse试用小记----Hibernate多对一双向关联(2)

myeclipse试用小记----Hibernate多对一双向关联&#xff08;2&#xff09;在上篇文章“myeclipse试用小记----Hibernate多对一单向关联&#xff08;1&#xff09;”中&#xff0c;讲到了“Hibernate多对一单向关联”&#xff0c;现在我打算把这个做成双向的&#xff0c;也就是多…

Python的程序结构[4] - 函数/Function[2] - 匿名函数

匿名函数 / Anonymous Function 匿名函数是一种不需要绑定函数名的函数 (i.e. functions that are not bound to a name)。匿名函数通过 lambda 表达式进行构建。常用于快速建立起一个(一次性的)函数。 Note: lambda 是 Python 的一个表达式/关键字&#xff0c;类似 return&…

数组 的地址计算

数组是一个特殊的数据结构&#xff0c;数组的基本操作不涉及数组结构的变化&#xff0c;因此对于数组而言&#xff0c;采用顺序存储表示比较合适。数组的顺序存储结构有两种&#xff1a;一、以行序存储&#xff0c;如高级语言BASIC、COBOL、Pascal、c语言。二、以列序存储&…

你会选择深圳还是佛山?

最近是校招季节&#xff0c;有很多人在询问offer的问题&#xff0c;我知道我已经发了很多这样相关的文章&#xff0c;可能大家看着都有点不耐烦了&#xff0c;不过还是想说&#xff0c;人生重要的选择真的没有几个&#xff0c;我每次回答都特别慎重&#xff0c;我有时候发出来也…

盗版XP变正版

此帖为转贴&#xff01;经本人测试100&#xff05;成功&#xff0c;谨以此帖献给各位目前不能更新的猫们&#xff0c;免得四处搜寻&#xff0c;徒劳无功&#xff01;一、经过无数次验证&#xff0c;本方法绝对有效&#xff01;敬请一试&#xff01;&#xff01;1。点击开始栏→…

区间K大数查询

给定一个序列&#xff0c;每次询问序列中第l个数到第r个数中第K大的数是哪个。输入格式第一行包含一个数n&#xff0c;表示序列长度。第二行包含n个正整数&#xff0c;表示给定的序列。第三个包含一个正整数m&#xff0c;表示询问个数。接下来m行&#xff0c;每行三个数l,r,K&a…

optimizer

在很多机器学习和深度学习的应用中&#xff0c;我们发现用的最多的优化器是 Adam&#xff0c;为什么呢&#xff1f; 下面是 TensorFlow 中的优化器&#xff0c; https://www.tensorflow.org/api_guides/python/train 在 keras 中也有 SGD&#xff0c;RMSprop&#xff0c;Adagr…

【漫画】25岁程序员 VS 35岁程序员,塑造自己的不可替代性,才能让自己更有价值 ​...

其中的酸甜苦辣你中了几条经常有人说&#xff1a;35岁是程序员的魔咒。但其实相比于刚毕业的年轻人&#xff0c;虽然35岁的程序员从精力上和年龄上都不再占有优势&#xff0c;但十几年的沉淀所造就的从容也是这个年龄段所独有的。当然&#xff0c;也不只是程序员&#xff0c;任…

C语言——内存管理

C语言——内存管理 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 //变量的存储布局&#xff08;伴随初级程序员和高级工程师一生的&#xff09; 静态区&#xff1a;全局变量和static变量&#xff0c;初始化的全局变量和静态变量放在一块区域&#xf…