数据结构2之希尔排序和冒泡排序.docVIP

  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文档。上传文档
查看更多
《数据结构》课程设计报告 题 目 希尔排序与冒泡排序 学生姓名 学 号 专业班级 指导老师 设计日期 2011-12-27 指导老师评阅意见: 评阅成绩: 签名: 目录 一、问题定义…………………………………………1 二、可行性分析………………………………………1 三、程序设计…………………………………………2 四、调试过程及其解决方法…………………………5 五、运行验证结果……………………………………5 六、课程设计总结……………………………………8 七、附录或参考资料………………………………….8 一.问题定义 1. 需设计的题目:希尔排序,冒泡排序 2. 要求:将输入的无序数按逆序或顺序输出。 二.可行性分析 (一)希尔排序 (1)、希尔排序的算法思路 先将整个待排记录序列分割成若干子序列分别进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序。 (2)、希尔排序的算法步骤 1.先令增量k为(n-1)/2,将待排序列元素分成若干子序列。 2.分别对子序列进行直接插入排序。 3.然后令k=k/2,重复1,2步骤。直至所有元素基本有序为止。 4.对全体元素进行一次直接插入。 5.希尔排序完成。 (3)、希尔排序的特点 子序列的构成不是简单地逐段分割,而是将相隔k的记录组成一个子序列,记录的移动不是一步一步地往前挪动,而是跳跃式的隔k个增量往前移,从而使得在进行最后一趟增量为1的插入排序时,序列已经基本有序,只要作记录的少量比较和移动即可完成排序。 (二)冒泡排序 (1)、冒泡排序的算法思路 先将数组第一个元素当成目标,依次与后面的元素进行比较,若是比第一个元素小,则交换位置,反之继续往后面比较,直到最后一个元素。完成一趟比较。最小的元素存放在第一个位置中。然后将第二个元素当成目标,按上述方法找到次小的元素存放在第二个位置中。依此重复上述操作M次后,排序结束. (2)、冒泡排序的算法步骤 1.通过一趟排序,从M个整数中选出值最小的整数,将它交换到第一个元素位置。 2.从剩余的M-1个整数中选出值次小的整数,将它交换到第二个元素的位置上。 3.重复上述操作M次。 4.冒泡排序完成。 (3)、冒泡排序的特点 用两层嵌套循环实现待排序元素的排序。 若记录序列的初始状态为正序,则冒泡排序过程只需进行一趟排序,在排 1 序过程中只需进行n-1次比较,且不移动记录;反之,若记录序列的初始状态 为逆序,则需进行n(n-1)/2次比较和记录移动。因此冒泡排序总的时间复杂度为O(n2)。 三.程序设计 1.‘#define N 100’ 2. void shell_sort1(int *data,int n) { int i,j,gap; gap = n/2; while(gap0) { for(i=gap+1;i=n;i++) { if(data[i]data[i-gap]) { data[0] = data[i]; for(j=i-gap;j0data[0]data[j];j-=gap) data[j+gap]=data[j]; data[j+gap]=data[0]; } } gap/=2; } for(i=1;i=n;i++) coutdata[i] ; coutendl; } void shell_sort2(int *data,int n) { int i,j,gap; gap = n/2; while(gap0) { for(i=gap+1;i=n;i++) { if(data[i]

文档评论(0)

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

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

1亿VIP精品文档

相关文档