- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C常用排序法:冒泡选择快速希尔……28
C++常用排序法研究?
首先介绍一个计算时间差的函数,它在time.h头文件中定义,于是我们只需这样定义2个变量,再相减就可以计算时间差了。函数开头加上?????clock_t???start???=???clock();?????????函数结尾加上?????clock_t???end???=???clock();?????????于是时间差为:?end?-?start??不过这不精确的???多次运行时间是不同的???和CPU???进程有关吧(先总结一下:以下算法以时间和空间以及编码难度,以及实用性方面来看,快速排序法是最优秀的!推荐!~但是希尔排序又是最经典的一个,所以建议优先看这2个排序算法)排序算法是一种基本并且常用的算法。由于实际工作中处理的数量巨大,所以排序算法?对算法本身的速度要求很高。???而一般我们所谓的算法的性能主要是指算法的复杂度,一般用O方法来表示。在后面我将?给出详细的说明。???对于排序的算法我想先做一点简单的介绍,也是给这篇文章理一个提纲。???我将按照算法的复杂度,从简单到难来分析算法。???第一部分是简单排序算法,后面你将看到他们的共同点是算法复杂度为O(N*N)(因为没有?使用word,所以无法打出上标和下标)。???第二部分是高级排序算法,复杂度为O(Log2(N))。这里我们只介绍一种算法。另外还有几种?算法因为涉及树与堆的概念,所以这里不于讨论。???第三部分类似动脑筋。这里的两种算法并不是最好的(甚至有最慢的),但是算法本身比较?奇特,值得参考(编程的角度)。同时也可以让我们从另外的角度来认识这个问题。???第四部分是我送给大家的一个餐后的甜点——一个基于模板的通用快速排序。由于是模板函数?可以对任何数据类型排序(抱歉,里面使用了一些论坛专家的呢称)。??????现在,让我们开始吧:????一、简单排序算法?由于程序比较简单,所以没有加什么注释。所有的程序都给出了完整的运行代码,并在我的VC环境?下运行通过。因为没有涉及MFC和WINDOWS的内容,所以在BORLAND?C++的平台上应该也不会有什么?问题的。在代码的后面给出了运行过程示意,希望对理解有帮助。?1.冒泡法:?这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡:?#include?iostream.h?void?BubbleSort(int*?pData,int?Count)?{???int?iTemp;???for(int?i=1;iCount;i++)???{?????for(int?j=Count-1;j=i;j--)?????{???????if(pData[j]pData[j-1])? [Page]??????{?????????iTemp?=?pData[j-1];?????????pData[j-1]?=?pData[j];?????????pData[j]?=?iTemp;???????}?????}???}?}?void?main()?{???int?data[]?=?{10,9,8,7,6,5,4};???BubbleSort(data,7);???for?(int?i=0;i7;i++)?????coutdata[i]\?\;???cout\\\n\;?}?倒序(最糟情况)?第一轮:10,9,8,7-10,9,7,8-10,7,9,8-7,10,9,8(交换3次)?第二轮:7,10,9,8-7,10,8,9-7,8,10,9(交换2次)?第一轮:7,8,10,9-7,8,9,10(交换1次)?循环次数:6次?交换次数:6次?其他:?第一轮:8,10,7,9-8,10,7,9-8,7,10,9-7,8,10,9(交换2次)?第二轮:7,8,10,9-7,8,10,9-7,8,10,9(交换0次)?第一轮:7,8,10,9-7,8,9,10(交换1次)?循环次数:6次?交换次数:3次?上面我们给出了程序段,现在我们分析它:这里,影响我们算法性能的主要部分是循环和交换,?显然,次数越多,性能就越差。从上面的程序我们可以看出循环的次数是固定的,为1+2+...+n-1。?写成公式就是1/2*(n-1)*n。?现在注意,我们给出O方法的定义:???若存在一常量K和起点n0,使当n=n0时,有f(n)=K*g(n),则f(n)?=?O(g(n))。(呵呵,不要说没?学好数学呀,对于编程数学是非常重要的!!!)?现在我们来看1/2*(n-1)*n,当K=1/2,n0=1,g(n)=n*n时,1/2*(n-1)*n=1/2*n*n
您可能关注的文档
最近下载
- 人教版数学试卷五年级下册期末测试题9.doc VIP
- 人教版道德与法治七年级上册知识点梳理(00002).docx VIP
- DBJ∕T 13-71-2021 回弹法检测混凝土抗压强度技术规程.docx VIP
- 新生儿低血糖临床规范管理专家共识.pptx VIP
- 三角函数 新高考数学知识点总结与题型精练(新高考地区专用).docx VIP
- 沪教版六年级上册数学练习题(最全).doc VIP
- 组织效能提升工作 坊 系统思考:如何破除组织防卫,提高组织效能.docx
- 《GB30000.27-2013化学品分类和标签规范第27部分:吸入危害》最新解读.pptx VIP
- 园林绿化养护台账.docx VIP
- 智慧医院智慧消防系统设计方案.docx VIP
文档评论(0)