算法实习报告(一种新颖的排序算法介绍).pptx

算法实习报告(一种新颖的排序算法介绍).pptx

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法实习报告(一种新颖的排序算法介绍).pptx

一种新型的排序算法吕日辉、郝志刚、潘知才、邹锋、杨海强汇报人:吕日辉目录1 问题的由来2 算法思想及其实现本文目录结构2.1 该算法在整数排序的应用及结果对比2.2 该算法在浮点数据排序的应用及结果对比3 算法的优缺点4 总结和展望 问题由来1问题的由来问题1:我们班大概有120多人,老师给定我们成绩后,怎样排成绩会比较快?几个问题问题2:谁能给一个方案,能够快速的把在座的各位按照身高排个序?1问题的由来计算机上如何实现呢?算法的核心 思想2算法核心思想的演示7352443520110050403020100根据范围申请数组并初始化6对原素组遍历543待排序数组2554433221100543210111赋值给原数组111已排好数组2.1 该算法在整数排序的应用2.1 该算法在整数排序的应用申请一段空间:int* index = new int[ high - low + 1 ];进行必要的初始化:for(int i = 0 ; i != high - low + 1 ; ++i ) index[ i ] = 0;这一段算法复杂度为range,既数组取值范围对待排序数组进行一次遍历: for(int i = 0 ; i != num ; ++i) index[ array[ i ] - low ]++;这一段复杂度为2N,(N是数组个数)对新申请的数组进行一次遍历,把已经排好的重新赋给待排序数组int mark = 0;for(int i = 0 ; i != high - low + 1 ; ++ i) if(index[ i ] != 0) for(int j = 0 ; j != index[i] ;++ j) array[ mark++ ] = i + low;这一段复杂度为N。2.1 该算法在整数排序的应用算法复杂度分析从上面的分析可知,算法复杂度为:F(n) = 3n+range ······ 式子1从上面这个表达式可以很清晰的看出来,在range不超过n很多的情况下,该算法是具有大on的效果的。特别的,在rangen的情况下,算法可以高效的达到3n的效果,这样的复杂度还是非常高效的。../算法报告(完整版)/timeview.exeVS超级无敌排序法传统快速排序法 对于浮点类型数据的 实现 2.2算法在double类型数据排序上的应用double类型怎么实现呢?2.2算法在double类型数据排序上的应用整形数据部分小数部分Double类型2.2算法在double类型数据排序上的应用51.241.030.422.312.100.7这里使用标准库里的算法2102.12.3整数排序专有的数据结构struct double_dear{int nums;//用来记录具有相同整//数部分的个数double* dou;//存放具有相同整数部//的double类型数据};1.01.2标准排序0.70.4申请一个新的数组待排序数组52.342.131.221.010.700.422.12.311.01.200.40.7 依次往回赋值已排好数组2.2算法在double类型数据排序上的应用这个过程我们可以分四步://必要的初始化:复杂度为rangedouble_dear* dou_index = new double_dear[high - low +1];for(int i=0;i!=high - low +1;++i) dou_index[i].nums = 0;//进行第一次遍历,对每一个子数组申请相应的空间,复杂度O(n)for (int i = 0;i!=num;++i) dou_index[(int)array[i]-low].nums++;for(int i=0;i!=high - low +1;++i) dou_index[i].dou = new double[dou_index[i].nums];//把相应的值添加到对应的子数组中,复杂度O(n)for (int i = 0;i!=num;++i) { int k = 0; dou_index[(int)array[i]-low].dou[k++] = array[i];}//对每一个子数组进行标准排序,然后往回写值,复杂度range * (n/range)lg(n/range)。int mark = 0; for(int i=0;i!=high - low +1;++i) if(dou_index[i].nums!=0){ sort(dou_index[i].dou , ou_index[i].dou+dou_index[i].nums ); for(int j=0;j!= dou_index[i].nums;++j) array[mark+

文档评论(0)

aiwendang + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档