c语言排序算法论文.docVIP

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

算法论文 题目名称:《c语言常用排序算法分析》 系部名称:计算机科学与工程 班 级: 学 号: 学生姓名: 指导教师: 2014年4月 c语言常用排序算法分析 摘 要 关键词: 关键词关键词关键词 正文 一、冒泡法: 这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡 #include stdio.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]) { iTemp = pData[j-1]; pData[j-1] = pData[j]; pData[j] = iTemp; } } } } int main() { int data[] = {8,7,1,6,9,4,5,2,3,}; BubbleSort(data,9); for (int i=0;i9;i++) { printf(%d,data[i]); printf(\n); } return 0; } 倒序(最糟情况) 第一轮: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=K*g(n)。所以f(n)=O(g(n))=O(n*n)。所以我们程序循环的复杂度为O(n*n)。 再看交换。从程序后面所跟的表可以看到,两种情况的循环相同,交换不同。其实交换本身同数据源的有序程度有极大的关系,当数据处于倒序的情况时,交换次数同循环一样(每次循环判断都会交换),复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。乱序时处于中间状态。正是由于这样的原因,我们通常都是通过循环次数来对比算法。 交换法的程序最清晰简单,每次用当前的元素一一的同其后的元素比较并交换。 #include stdio.h void ExchangeSort(int* pData,int Count)//交换使用的函数 { int iTemp; for(int i=0;iCount-1;i++)//从第一到倒数第二个数的循环 { for(int j=i+1;jCount;j++)从当前数开始,依次往后,遇到逼当前数小的数,就把他们交换 { if(pData[j]pData[i]) { iTemp = pData[i]; pData[i] = pData[j]; pData[j] = iTemp; } } } } void main() { int data[] = {10,9,8,7,6,5,4}; ExchangeSort(data,7); for (int i=0;i7;i++) printf(%d

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档