- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
13 05 17 42 94 46 55 70 05 13 17 42 94 46 55 70 前2个元素重新建堆 13与05交换 94 70 55 46 42 17 13 5 堆排序结果 堆排序过程 94 13 5 55 46 17 70 42 94 70 5 42 46 17 55 13 94 70 55 42 13 17 46 5 94 70 55 46 13 17 42 5 94 70 55 46 42 17 13 5 94 70 55 46 42 17 13 5 94 70 55 46 42 17 13 5 第一趟结果: 第二趟结果: 第三趟结果: 第四趟结果: 第五趟结果: 第六趟结果: 第七趟结果: 堆排序算法 void heapsort(int r[],int n) //堆排序 { int t; for(int i=n/2;i=0;i--) //将r调整成堆 SIFT(r,i,n); for(i=n-1;i=0;i--) { t=r[0]; r[0]=r[i]; r[i]=t; SIFT(r,0,i-1); } } 05 46 17 13 42 55 70 94 i 0 堆排序的程序: #include stdio.h #define mm 8 int a[mm+1]; int k; void shift(a,l,m) void heapsort(a) int a[mm+1]; { int i,x; for (i=mm/2;i=1;i--) shift(a,i,mm); /* 从第开始进行筛选建堆 */ for (i=mm;i=2;i--) { x=a[1]; a[1]=a[i]; a[i]=x; /* 将堆顶元素和堆中最后一个元素交换 */ shift(a,1,i-1); /* 调整第一个元素使之重又成为堆 */ } } main() { printf(请输入数据: \n); for (k=1;k=mm;k++) scanf(%d,a[k]); printf(初始数据:\n); for (k=1;k=mm;k++) printf( a[%d]=%d ,k,a[k]); printf(\n); heapsort(a); printf(排序后的数据:\n ); for (k=1;k=mm;k++) printf( |a[%d]=%d| ,k,a[k]); printf(\n); } 五、 基数排序 前面介绍的几种排序方法都是按数据元素(或记录关键字)值的大小进行排序的 而多关键字排序是一种按组成数据元素或关键字的各位值进行排序的方法,基数排序借助的就是这种思想,它属于分布式排序,也称口袋排序。 基数排序是把逻辑关键字看成由若干个子关键字复合而成的 →假设有n个关键字{r1,r2,…,rn}需进行排序 →每个关键字由d元组(k1k2k3…kd)子关键字组成,k1是关键字值的最高位,kd是关键字值的最低位,其基数为rd 五、 基数排序 前面介绍的几种排序方法都是按数据元素(或记录关键字)值的大小进行排序的 多关键字排序是一种按组成数据元素或关键字的各位值进行排序的方法,基数排序借助的就是这种思想。 基数排序属于分布式排序,也称口袋排序、“桶子法” 。 基数排序法是属于稳定性的排序 时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较性排序法。 基数排序的方式可以采用: LSD(Least significant digital)的排序方式由键值的最右边开始 MSD(Most significant digital)由键值的最左边开始。 以LSD为例,假设原来有一串数值如下所示: 73, 22, 93, 43, 55, 14, 28, 65, 39, 81 73, 22, 93, 43, 55, 14, 28, 65, 39, 81 首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中; 接下来将这些桶子中的数值重新串接起来,成为以下的数列: 0 1 81 2 22 3 73 93 43 4 14 5 55 65 6 7 8 28 9 39 81, 22, 73, 93, 43, 14, 55, 65, 28, 39 81, 22, 73, 93, 43, 14, 5
文档评论(0)