课件-计算机语言与程序设计_递归算法举例.ppt

课件-计算机语言与程序设计_递归算法举例.ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
执行(4)a[r]=a[l],a[5]=7。见图8 这时仍然l<r,应继续执行直到型循环的循环体。 6 7 7 1 3 2 4 6 5 4 3 2 1 0 l r 图 8 5 k 执行(1),a[r]=7>k,让r=r-1=4。见图9 6 7 7 1 3 2 4 6 5 4 3 2 1 0 l r 图 9 5 k 之后,l=r,退出直到型循环,做a[l]=k,l=4,a[4]=5,这是5的最终位置,5将整个数据分成左右两个集合,见图10。 6 7 5 1 3 2 4 6 5 4 3 2 1 0 l r 图 10 左 右 5 k 用上述思路去排左边的部分 从l=0到r=3,见图11。让k=a[l]=a[0]=4,然后进到直到型循环, 执行(1)a[r]=1<k,不满足当循环的条件,r不动。 执行(2)a[l]=a[r],l=l+1=1,见图12 1 3 2 1 3 2 1 0 l r 图 12 1 3 2 4 3 2 1 0 l r 图 11 4 k 执行(3)a[l]<k,l=l+1=2,a[2]<k,l=l+1=3,这时l=r,不会执行(4),同时退出直到型循环,见图13。然后做a[l]=k,即a[3]=4,见图14,左边也排好了。 4 3 2 1 3 2 1 0 图 14 1 3 2 1 3 2 1 0 l r 图 13 l r 4 k 4 k 4、用上述思路去排右边的部分,见图15,让k=a[l]=a[5]=7,进入直到型循环; 执行(1)a[r]=6<k,r不动 执行(2)a[l]=a[r]=6,l=l+1=5+1=6,见图16 图 16 6 7 6 5 l r 图 15 6 6 6 5 l r 7 k 这时l=r,不再执行(3)(4),退出直到型循环后,做a[l]=k,见图17。 图 17 7 6 6 5 l r 7 k 在有了递归调用函数之后,主程序很容易写,主程序中应包含 1、 定义整型变量:数组a[10],i; 2、 用循环结构输入待排序的数,将其放入a数组; 3、 调用sort函数,使用三个实际参数 a——将数组a当实参; 0——数组下标下界; 9——数组下标上界; 4、 输出排序结果 下面给出参考程序(分两页) #include <stdio.h> //预编译命令 void sort(int array[ ],int ll,int rr) //被调用函数,数组array,ll,rr为形参 { //函数体开始 int l,r,i,k; //定义变量 if(ll<rr) //如果ll<rr,则做下列7件事: { //7件事开始 l=ll;r=rr;k=array[l]; //第1件事 do { //第2件事(开始) while((l<r)&&(array[r]>=k))r=r-1; //2.1,右边的元素>=k,让r往中间移 if(l<r) //2.2,右边的元素<k,让 { array[l]=array[r]; //array[r]送给array[l], l=l+1; //同时让l往中间移 } while((l<r)&&(array[l]<=k))l=l+1; //2.3,左边的元素<=k,让l往中间移 if (l<r) array[r]=array[l]; //2.4,左边的元素>k,让array[l] //送给array[r] } // while(l!=r); //第2件事(结束) array[l]=k; //第3件事,k已排到位 for(i=ll;

文档评论(0)

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

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

1亿VIP精品文档

相关文档