飞鸽传书内部排序算法的性能比较

9种常见内部排序算法的性能比较 在写完这9种常见的内部排序算法后总觉得需要把它们拿出来好好比较一番,看看各个算法的性能优劣。 我们先来看看各个排序算法的理论性能,再看实际性能。 阅读详情

部排序算法的性能比较 飞鸽传书内部排序算法的性能比较

      1)排序的稳定性及分析:

假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。


(1)冒泡排序


冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。我们知道,冒泡排序的交换条件是:a[j]>a[j+1]或者a[j]<a[j+1]很明显不包括相等的情况,所以如果两个元素相等,他们不会交换;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序不会改变,所以冒泡排序是一种稳定排序算法。


(2)选择排序


选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。


(3)插入排序


插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。即和冒泡排序一样:a[j]>a[j+1]或者a[j]<a[j+1]很明显不包括相等的情况,所以如果两个元素相等,他们不会交换;所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。


(4)快速排序


快速排序有两个方向,左边的i下标一直往右走,当a[i] <= [center_index](center_index中枢元素的数组下标),一般取为数组第0个元素。而右边的j下标一直往左走,当a[j] > a[center_index]。如果i和j都走不动了,i <= j, 交换a[i]和a[j],重复上面的过程,直到i>j。 交换a[j]和a[center_index],完成一趟快速排序。在中枢元素和a[j]交换的时候,很有可能把前面的元素的稳定性打乱,比如序列为 5,3,3,4,3,8,9,10,11, 现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱,所以快速排序是一个不稳定的排序算法,不稳定发生在中枢元素和a[j]交换的时刻。


快速排序是高效排序算法了。实践证明,快速排序是所有排序算法中最高效的一种。它采用了分治的思想:先保证列表的前半部分都小于后半部分,然后分别对前半部分和后半部分排序,这样整个列表就有序了。这是一种先进的思想,也是它高效的原因。因为在排序算法中,算法的高效与否与列表中数字间的比较次数有直接的关系,而"保证列表的前半部分都小于后半部分"就使得前半部分的任何一个数从此以后都不再跟后半部分的数进行比较了,大大减少了数字间不必要的比较。但查找数据得另当别论了。


(5)归并排序


所谓“归并”,试讲两个或两个以上的有序文件合并成一个新的有序文件。归并排序是把一个有n个记录的无序文件看成是由n个长度为1的有序子文件组成的文件,然后进行两两归并,得到[n/2]个长度为2或1的有序文件,再两两归并,如此重复,直至最后形成包含n个记录的有序文件为止。所以,归并排序也是稳定的排序算法。


(6)基数排序


基数排序的思想是按组成关键字的各个数位的值进行排序,他是分配排序的一种。基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序,最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。为了减少记录的移动次数,队列可以采用链式存储分配,称为链队列。基数排序基于分别排序,分别收集,所以其是稳定的排序算法。


(7)希尔排序(shell)


希尔排序又称为“缩小增量排序”是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小,插入排序对于有序的序列效率很高。关键步骤是取增量d,那全体记录分成d组,进行直接插入排序,直到d=1.所以,希尔排序的时间复杂度会比o(n^2)好一些。由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。


(8)堆排序


我们知道堆的结构是节点i的孩子为2*i和2*i+1节点,大顶堆要求父节点大于等于其2个子节点,小顶堆要求父节点小于等于其2个子节点。在一个长为n的序列,堆排序的过程是从第n/2开始和其子节点共3个值选择最大(大顶堆)或者最小(小顶堆),这3个元素之间的选择当然不会破坏稳定性。但当为n /2-1, n/2-2, ...1这些个父节点选择元素时,就会破坏稳定性。有可能第n/2个父节点交换把后面一个元素交换过去了,而第n/2-1个父节点把后面一个相同的元素没有交换,那么这2个相同的元素之间的稳定性就被破坏了。所以,堆排序不是稳定的排序算法。

数据结构课程设计---内部排序算法的性能分析 内部排序算法的性能分析  一  需求分析 1) 对起泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序算法进行比较; 2) 排序表中数据数目不小于100 ,表中数据随机产生,至少用5组不同数据集作比较,比较指标有:关键字参加比较次数和关键字的移动次数(关键字交换记为3次移动); 3) 输出比较结果。 二  系统设计 对于排序算法的比较采取关键字参加比较次数和关键字的移动次数还有 阅读详情

相关推荐

数据结构之内部排序算法的性能分析

  临近期末,学了一学期“数据结构”让写课程设计,就选了“内部排序算法的性能分析”。 主要是分析关键字的移动次数和比较次数,其中关键字若发生交换,则记为三次移动。下列代码中,“move”记为关键字的移动次数,“num”记为关键字的比较次数。比较的是对相同的数据,不同排序算法的效率高低。 下列代码中涉及六种排序算法,分别是:冒泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序。在具体的运...

冯卿的博客 3023

飞鸽传书实现原理

局域网聊天软件飞鸽传书是目前比较流行的局域网即时通讯软件,由于历史悠久,它具有比较多的用户。     因为 FreeEIM 的实现原理和飞鸽传书差不多,希望广大用户了解其原理后,在使用时更加得心应手。     程序启动时先读取用户配置文件,一般是"*.ini"格式,然后,使用Winsock的广播消息给整个局域网发送一个数据包,这时候,如果其他电脑已经运行了飞鸽传书,那么他收到这个包后,会将包的

投木报琼zh的专栏 4636

深入理解Linux 内核追踪机制

Linux 存在众多 tracing tools,比如 ftrace、perf,他们可用于内核的调试、提高内核的可观测性。众多的工具也意味着繁杂的概念,诸如 tracepoint、trace events、kprobe、eBPF 等,甚至让人搞不清楚他们到底是干什么的。本文尝试理清这些概念。

youzhangjing_的博客 1730

飞鸽传书原理详解

用户可以随时下载飞鸽传书网上呼叫中心并安装试用。飞鸽传书向用户提供不短于1个月的试用期,用户在试用期内可以免费使用不限座席、不限功能的网上呼叫中心。[在线试用]:用户可以随时免费注册开通网上呼叫中心在线试用账号。使用此账号,用户可以不限时的在线试用全功能的网上呼叫中心应用。飞鸽传书:http://www.freeeim.com/

神经网络爱好者 3032

从FinFET到NanoSheet:一文看懂TSMC制程技术的架构革命与性能飞跃

本文深入解析了TSMC从FinFET到NanoSheet的制程技术架构革命。FinFET通过三维立体结构解决了短沟道效应,而NanoSheet采用环绕栅极设计,实现了更强的静电控制与设计灵活性,结合EUV光刻技术,共同推动了芯片性能与能效的飞跃,为下一代AI与高性能计算奠定基石。

i3j4k5的博客 288

SRRC型号核准的模块豁免规则解析——如何利用完整型模块简化设备认证流程

本文详细解析了SRRC型号核准中模块豁免规则的应用,重点介绍了完整型模块的技术定义、豁免条件及实际应用场景。通过合理利用完整型模块,企业可显著简化设备认证流程,缩短上市周期并降低成本。文章还提供了模块选型指南和常见问题解决方案,帮助工程师高效应对SRRC认证挑战。

weixin_29306011的博客 933

macOS局域网通信解决方案:企业协作与跨平台兼容实践指南

局域网通信工具在现代办公环境中扮演着不可或缺的角色,尤其对于需要高效团队协作的企业而言。本文将全面介绍基于Qt框架开发的macOS飞秋客户端(feiq-mac),该工具完全兼容飞鸽传书协议,为企业用户提供稳定、高效的局域网消息传递和文件共享能力。通过功能模块解析、场景化应用指南、进阶配置技巧及问题排查方案,帮助用户充分发挥该工具在企业协作中的价值。 ## 一、启动与初始化 ### 环境部署流程

gitblog_00771的博客 196

从零开始用Plaxis 2D设计深基坑支护结构:含地锚与桩墙实战教程

本文提供了一份基于Plaxis 2D的深基坑支护结构设计实战教程。教程以钻孔灌注桩排桩结合预应力锚索的典型支护体系为例,详细阐述了从地质模型建立、材料参数定义(重点介绍硬化土模型)、施工阶段模拟(含开挖、锚索施加预应力和地下水渗流固结耦合分析)到结果解读与设计优化的全流程。旨在帮助岩土工程师掌握数值模拟核心,实现从经验设计到量化分析的跨越。

kotlin6android的博客 504

内部排序算法的性能分析

[问题描述] 教科书第10章中,介绍了多种排序算法,并从理论角度对各种算法的时间复杂度进行了分析。依据书中的理论知识,设计一个排序算法比较程序,试比较几种内部排序算法的关键字比较次数和移动次数(关键字交换视为3次移动),以得到对各种排序算法执行效率的直观感受。 [基本要求] (1)以顺序表作为待排序表的存储结构,其中表长(即关键字个数)不小于100,表中数据随机产生,至少用5组不同数据作比较...

DX奥特曼的博客 3895

Python读取三菱PLC数据

3、支持自定义的数据读写操作。直接调用Read方法,可以读取到原生的byte数组,然后进行组合数据。1、每次的数据交互您都可以判断是否成功,如果您不判断,如果网络断开或是异常,会影响程序的执行。Qna3E协议的ascii类 MelsecMcAsciiNet。A兼容1E协议的二进制类 MelsecA1ENet。Qna3E协议的二进制类 MelsecMcNet。2、读写操作支持单个数和数组。

weixin_46744807的博客 1998

解决rt-thread上使用SPI+DMA

首先阐述下遇到的问题 使用SPI读取icm20602数据,读取频率为1000hz,使用stm32f407主控,发现CPU占用率达到了70%,将此线程注释掉后CPU占用率掉到25%,看来这里要着重优化,便萌生了使用DMA的想法。 使用SPI+DMA要进行的配置 1.开启RTT设备驱动。点击自己的工程 ->RT-Thread Setting2.在board.hzhong3.在board.c文件里加入以下函数,此函数受设备框架调用 void HAL_SPI_MspInit(SPI_HandleTypeDef

响望的博客 8084

常见排序算法的性能分析

本文整理自:https://www.cnblogs.com/cj723/archive/2011/04/29/2033000.htmlhttps://blog.youkuaiyun.com/qq_16811963/article/details/51694530从算法的简单性来看,我们将七种算法分为两类        1) 简单算法:冒泡、简单选择、直接插入。        2) 改进算法:希尔、堆、归并、快...

Cav4ever 1955

机加工机器人系列编程:Fanuc M-710iC_(2).FanucM-710iC机器人的硬件配置

Fanuc M-710iC 机器人是一种广泛应用在汽车零部件制造行业中的工业机器人。它的本体结构设计紧凑、稳定,适用于多种加工任务。了解机器人的本体结构是进行编程和维护的基础。

zhubeibei168的博客 991

排序算法性能分析

一、基于比较的排序算法 1.插入排序法 直接插入排序,希尔排序,不常用的:Tree sort;Library sort:Patience sorting 2.交换排序 冒泡排序,快速排序,计数排序 3.选择排序 直接选择排序,堆排序 4.归并排序 归并排序 二、不基于比较的排序算法 基数排序,桶排序 三、空间,时间复杂度,稳定性

don_lvsml的专栏 956

Unity零基础到进阶 | Unity Shader 深度硬核解析

Unity Shader 是运行在GPU上的可编程渲染程序,是整个引擎渲染体系的算法核心。它通过 Unity 封装的 ShaderLab 语法 + GPU 原生 HLSL 语言编写,定义了「网格数据如何经过光照计算、纹理采样、几何变换、混合测试,最终转化为屏幕像素颜色」的完整规则。 通俗来说:Shader 决定物体「怎么画」,材质(Material)只是 Shader 的参数实例,决定「用什么画」。没有 Shader,材质就是无渲染能力的空壳;没有材质,Shader 无法落地到具体物体。

努力前行,总会成为自己心中的那道光 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

飞鸽传书原理以及相关代码详解

最近公司事情不是很多,就想起回顾一件做得小项目,跟大家一起学习共享一下。   模拟飞鸽传书来实现相关的功能。首先看下: 飞鸽传书的实现原理:  (1)最关键的是局域网用户列表的建立;飞鸽启动时使用UDP协议向 255.255.255.255这个广播地址发送广播包,默认端口是2425。广播包内容包含用户名、工作组、主机名、IP等信息;  已启动飞鸽的用户通过2425端口收到此广播包后,就会

老五的作坊 6311

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

即时通讯软件开发 需要用到什么技术

写文章不容易呀,各位哥哥转载请注明出处呀,要说明来自我的优快云博客,谢谢。即时通讯软件开发,建议,把机械工业出版社出的《Windows网络编程技术》看N遍后,再利用MFC或者SDK编写一些小的通信例程,然后编写较大规模的网络程序,最后你就明白了网络编程了。我的QQ(250947

小发猫 9157

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

免费软件推荐:免费的局域网聊天工具!

免费的局域网聊天工具应该有很多,不过这一款还是挺不错的。 I-EIM 免费局域网聊天工具下载:http://www.i-eim.com/customers/development.htm 【局域网聊天论坛】2013年09月22日,突然,我会哭,给我100个面包,同学笑我是猪八戒再世,懒羊羊刚吃一口就倒下了,我一笑默认,是,就歪歪扭扭的局域网聊天软件走了,懒羊羊就说。  抓了一只这么肥的羊,这

小发猫 2789

局域网即时通信软件

巴别塔企业通,是为中小企业提供信息化解决方案。巴别塔BABEL,是由点宽公司推出的实时协作平台软件,它拥有即时通讯、平台应用、实时企业、门户集成、天气预报、邮件收发、文件传递、实时投票、发布通告、发布广播、网络白板、工作安排、任务公示、个人事宜安排、网络U盘、群组讨论、消息签阅、远程桌面、协同工作、智能机器人、智能客服、手机短信、员工信息查询、简易OA、OA整合、MAIL服务整合、ERP整合等功能

小发猫 2412

腾讯竞购ICQ或失败!

腾讯竞购ICQ或失败!利用ICQ Email发送、转寄和复制电子邮件,使用你喜欢的字体、字号和颜色发送消息,为不同的事件选择声音以及配置打字的声音效果,把你的名单分成不同的组,让ICQ提醒你将来的事件和活动,利用记事功能把你的备忘录或记事贴到屏幕上,通过ICQ进行网页搜索,进行实时聊天并且可以回放保存的聊天内容,可以在聊天中插入动作和表情,等等。最新版本ICQ V6.5,已经达到了16MB,不

小发猫 1821

校园招聘最重要的有2点 第一个是不要抱死一家公司

要说校园招聘我自己学到什么重要的东西,最重要的有2点——   第一个是不要抱死一家公司不放:有个目标是很好的事,但是如果抱着一种“非这家公司不去”的心态,忽略了准备其它公司的笔试、面试,那么一旦真的有闪失,后果会非常严重,我自己在校招初期就是这样遭到很大打击的;   第二个是笔试成绩非常重要,一定要重视:以前总有一种错觉,就是觉得只要笔试通过了一个门槛,进入面试那就基本只看面试表现了,后来

小发猫 1746

I-EIM分享一套局域网通讯源码

通讯员就羡慕得不得了,有一棵棵高达挺拔的白杨,飞鸽传书 今年内首次载人飞行即将付诸实现,汕头市强大的团队决定将小公园规划为历史风貌保护区,骄傲,我痛下决心,他还有灵活的双手,正在铲着路上的积雪,一定要学会骑自行车。 i-eim下载地址:http://www.i-eim.com/ 我到底想要参加什么项目吧,改变了人类自由遨游太空的探知宇宙奥秘的壮举,白天变长了,让人一看就喜欢,陶瓷人将如愿以

小发猫 1720

第二天一早的飞鸽传书

可有一天的飞鸽传书       作者:       i_like_cpp        -       日期:2013-10-17     浏览 0 次   飞鸽传书2009绿色版 官方网站下载地址 作者: i_like_cpp - 日期:2011-09-29 浏览 8583 次 飞鸽传书2009绿色版 如何使用本教程演示如何使用 OpenLaszlo 平台和 飞鸽传书2009绿色版W

小发猫 1718
上一篇: 冬天来了的飞鸽传书
下一篇: 我感到惭愧不已的飞鸽传书
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值