ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:782.01KB ,
资源ID:12012769      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/12012769.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(c语言各种排序法详解.docx)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

c语言各种排序法详解.docx

1、 一  插入排序 1.1  直接插入排序 基本思想:每次将一个待排序额记录按其关键码的大小插入到一个已经排好序的有序序列中,直到全部记录排好序。 图解: 代码实现: [cpp] view plain copy 1. //直接顺序排序   2. void InsertSort(int r[], int n)   3. {      4.     for (int i=2; i

2、 (int j=i-1; r[0]

3、进行直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。 图解: 代码实现: [cpp] view plain copy 1. //希尔排序   2. void ShellSort(int r[], int n)   3. {      4.     int i;   5.     int d;   6.     int j;   7.     for (d=n/2; d>=1; d=d/2)            //以增量为d进行直接插入排序   8.     {  

4、9.          for (i=d+1; i0 && r[0]

5、6.     }   17.    for(i=1;i   二 交换排序 2.1 起泡排序 起泡排序是交换排序中最简单的排序方法,其基本思想是: 两两比较相邻记录的关键码,如果反序则交换,直到没有反序的记录为止。 图解: 代码实现: [cpp] view plain copy 1. //起泡排序   2. voi

6、d BubbleSort(int r[], int n)   3. {   4.     int temp;   5.     int exchange;   6.     int bound;   7.     exchange=n-1;                       //第一趟起泡排序的范围是r[0]到r[n-1]       8.     while (exchange)                    //仅当上一趟排序有记录交换才进行本趟排序   9.     {   10.         bound=exchange;    11.     

7、    exchange=0;     12.         for (int j=0; jr[j+1])    14.         {   15.           temp=r[j];   16.           r[j]=r[j+1];   17.           r[j+1]=temp;   18.           exchange=j;                   //记录每一次发生记录交换的位置   19.        }   20.  

8、   }   21.     for(int i=0;i   2.2快速排序 基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 图解: 代码实现: [cpp] view plain copy 1. //快速排序一次划分  

9、 2. int Partition(int r[], int first, int end)   3. {      4.     int i=first;                        //初始化   5.     int j=end;   6.     int temp;           7.    8.     while (i

10、  12.        if (i

11、   21.            if (i

12、 }   31.    32. //快速排序   33. void QuickSort(int r[], int first, int end)   34. {   35.     if (first

13、           QuickSort(r, pivot+1, end);  //递归地对右侧子序列进行快速排序   40.     }   41.    42. }   三 选择排序 3.1 简单选择排序 基本思想:设所排序序列的记录个数为n。i取1,2,…,n-1,从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出排序码最小的记录,与第i个记录交换。执行n-1趟 后就完成了记录序列的排序。 图解: 代码实现: [cpp] view plain copy 1. //简单选择排序   2. void SelectSort(i

14、nt r[ ], int n)   3. {    4.     int i;   5.     int j;   6.     int index;   7.     int temp;   8.     for (i=0; i

15、[index])   13.              index=j;   14.        if (index!=i)    15.        {   16.           temp=r[i];   17.           r[i]=r[index];   18.           r[index]=temp;   19.        }   20.     }   21.     for(i=0;i

16、 3.2 堆排序 堆的定义     堆是具有下列性质的完全二叉树:每个结点的值都小于或等于其左右孩子结点的值(小根堆);或者每个结点的值都大于或等于其左右孩子结点的值(大根堆)。 大根堆和小根堆:根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆,又称最小堆。根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆,又称最大堆。注意:①堆中任一子树亦是堆。②以上讨论的堆实际上是二叉堆(Binary Heap),类似地可定义k叉堆。 假设当前要筛选结点的编号为k,堆中最后一个结点的编号为m,并且结点k的左右子树均是堆

17、即r[k+1] ~ r[m]满足堆的条件),则筛选算法用伪代码可描述为: 具体的筛选代码如下: [cpp] view plain copy 1. //筛选法调整堆   2. void Sift(int r[], int k, int m)   3. {   4.      5.     int i;   6.     int j;   7.     int temp;   8.     i=k;    9.     j=2*i+1;                            //置i为要筛的结点,j为i的左孩子   10.   while (j

18、<=m)                          //筛选还没有进行到叶子   11.   {   12.       if (jr[j]) break;             //根结点已经大于左右孩子中的较大者   15.       else    16.       {   17.            temp=r[i];   18.         

19、   r[i]=r[j];   19.            r[j]=temp;                   //将根结点与结点j交换   20.            i=j;   21.            j=2*i+1;                     //被筛结点位于原来结点j的位置   22.      }   23.   }   24. }   堆排序 堆排序的基本思想是:首先将待排序的记录序列构造成一个堆,此时,选出了堆中所有记录的最大者即堆顶记录,然后将它从堆中移走(通常将堆顶记录和堆中最后一个记录交换),并将剩余的记录再调整成堆,

20、这样又找出了次大的记录,以此类推,直到堆中只有一个记录为止。 (1)用大根堆排序的基本思想 ① 先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区 ② 再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到新的无序区R[1..n-1]和有序区R[n],且满足R[1..n-1].keys≤R[n].key ③由于交换后新的根R[1]可能违反堆性质,故应将当前无序区R[1..n-1]调整为堆。然后再次将R[1..n-1]中关键字最大的记录R[1]和该区间的最后一个记录R[n-1]交换,由此得到新的无序区R[1..n-2]和有序区R[n-1..n],

21、且仍满足关系R[1..n-2].keys≤R[n-1..n].keys,同样要将R[1..n-2]调整为堆。 …… 直到无序区只有一个元素为止。 (2)大根堆排序算法的基本操作: ① 初始化操作:将R[1..n]构造为初始堆; ② 每一趟排序的基本操作:将当前无序区的堆顶记录R[1]和该区间的最后一个记录交换,然后将新的无序区调整为堆(亦称重建堆)。 注意: ①只需做n-1趟排序,选出较大的n-1个关键字即可以使得文件递增有序。 ②用小根堆排序与利用大根堆类似,只不过其排序结果是递减有序的。堆排序和直接选择排序相反:在任何时刻堆排序中无序区总是在有序区之前,且有序区是在原向量的

22、尾部由后往前逐步扩大至整个向量为止 代码实现: [cpp] view plain copy 1. //堆排序   2. void HeapSort(int r[ ], int n)   3. {   4.       5.   int i;   6.   int temp;   7.   for (i=n/2; i>=0; i--)                //初始建堆,从最后一个非终端结点至根结点   8.      Sift(r, i, n) ;        9.    for (i=n-1; i>0; i-

23、)                //重复执行移走堆顶及重建堆的操作   10.    {   11.        temp=r[i];   12.        r[i]=r[0];   13.        r[0]=temp;   14.       Sift(r, 0, i-1);   15.    }   16.    for(i=0;i

24、所有待排序记录都在一个有序序列为止。 一路归并算法实现: [cpp] view plain copy 1. //一次归并   2. void Merge(int r[], int r1[], int s, int m, int t)   3. {   4.    5.     int i=s;   6.     int j=m+1;   7.     int k=s;   8.          9.      while (i<=m && j<=t)   10.      {      11.          if (r[i]<=r[j])

25、    12.              r1[k++]=r[i++];            //取r[i]和r[j]中较小者放入r1[k]   13.          else    14.              r1[k++]=r[j++];    15.      }   16.       if (i<=m)    17.           while (i<=m)                  //若第一个子序列没处理完,则进行收尾处理            18.               r1[k++]=r[i++];    19.       e

26、lse     20.           while (j<=t)                  //若第二个子序列没处理完,则进行收尾处理           21.             r1[k++]=r[j++];    22. }   [cpp] view plain copy 1. //一趟归并   2. void MergePass(int r[ ], int r1[ ], int n, int h)   3. {   4.     int i=0;   5.     int k;   6.    7.    while (i<=n-

27、2*h)                     //待归并记录至少有两个长度为h的子序列   8.    {   9.      Merge(r, r1, i, i+h-1, i+2*h-1);   10.         i+=2*h;   11.    }   12.    if (i

28、r1[k]=r[k];   16. }   17.    18. //归并排序的非递归算法   19. void MergeSort1(int r[ ], int r1[ ], int n )   20. {    21.   int h=1;   22.   int i;   23.    24.   while (h

29、   h=2*h;   30.   }   31.   for(i=0;i

30、    {   8.         r1[s]=r[s];   9.    10.     }   11.     else    12.     {    13.             m=(s+t)/2;   14.             MergeSort2(r, r2, r1, s, m);        //归并排序前半个子序列           15.             MergeSort2(r, r2, r1, m+1, t);      //归并排序后半个子序列   16.             Merge(r2, r1, s, m, t);             //将两个已排序的子序列归并         17.     }       18. }   总结 各种排序方法的比较(未完待续):

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服