数据结构的排序算法.docxVIP

  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文档。上传文档
查看更多
数据结构的排序算法

数据结构排序算法及代码整理收藏排序;1、插入排序(直接插入排序和希尔排序)2、选择排序(直接选择排序和堆排序)3、交换排序(冒泡排序和快速排序)4、归并排序5、基数排序---------------------直接插入排序说明:逐个将后一个数加到前面的排好的序中。在直接插入排序过程中,对其中一个记录的插入排序称为一次排序;直接插入排序是从第二个记录开始进行的,因此,长度为n的记录序列需要进行n-1次排序才能完成整个序列的排序。时间复杂度为O(n2)。void InsertSort(elemtype x[],int n)/*用直接插入法对x[0]-x[n-1]排序*/{ int i,j; elemtype s; for(i=0;in-1;i++) { s=x[i+1]; j=i; while(j-1s.keyx[j].key) { x[j+1]=x[j]; j--; } x[j+1]=s; }}---------------------希尔排序说明:希尔排序又称缩小增量排序,增量di可以有各种不同的取法,但最后一次排序时的增量必须为1,最简单可取di+1=di/2(取小)。时间复杂度为O(n(log2n)2)。void ShellSort(elemtype x[],int n,intd[],int Number)/*用希尔排序法对记录x[0]-x[n-1]排序,d为增量值数组*//*Number为增量值个数,各组内采用直接插入法排序*/{ int i,j,k,m,Span; elemtype s; for(m=0;mNumber;m++) { Span=d[m]; for(k=0;kSpan;k++) { for(i=k;in-1;i+=Span)/*这个for之后的是“组内采用直接插入法排序”*/ { s=x[i+Span]; j=i; while(j-1s.keyx[j].key) { x[j+Span]=x[j]; j-=Span; } x[j+Span]=s; } } }}插入排序个人总结(cute):1. 插入排序,随机来一个数据,给他找一个“暂时适合“的位置,后面到来的数据,可能会抢夺前面人的位置2. 适合待排序集合不断更新的情况,稳定集合也可以使用此方法----------------------------直接选择排序说明:每次将后面的最小的找出来插入前面的已排好的序中。同理,具有n个记录的序列要做n-1次排序。时间复杂度为O(n2)。void SelectSort(elemtype x[],int n)/*用直接选择排序法对x[0]-x[n-1]排序*/{ int i,j,Small; elemtype Temp; for(i=0;in-1;i++) { Small=i; for(j=i+1;jn;j++) if(x[j].keyx[Small].key) Small=j; if(Small!=i) { Temp=x[i]; x[i]=x[Small]; x[Small]=Temp; } } }-----------------------------堆排序:#includeiostream#includealgorithmusing namespace std;int A[11],heap_size;void MaxHeapify(int A[],int i){ int largest=-1; int left=2*i;//获取根节点的左孩子 int right=2*i+1;//获取根节点的右孩子 if(left=heap_sizeA[left]A[i]) largest=left; else largest=i; if(right=heap_sizeA[right]A[largest]) largest=right; if(largest!=i)//根节点不是最大值则交换后继续递归 { swap(A[i],A[largest]); MaxHeapify(A,largest); }}void BuildMaxHeap(int A[]){ for(int i=10/2;i=1;i--) MaxHeapify(A,i);}int ma

文档评论(0)

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

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

1亿VIP精品文档

相关文档