C常用排序法:冒泡+选择+快速+希尔……28.docVIP

C常用排序法:冒泡+选择+快速+希尔……28.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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

文档评论(0)

pfenejiarz + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档