5.选择法<2004.9.29>
我们还是以实现上一个例程为例;用选择法来实现对10个整数进行排序. main() { int ri[]={1,5,7,9,10,8,11,21,6,2}; int i,j,k,t; for(i=0;i<9;i++) {k=i; for(j=i+i;j<10;j++) if(ri[j]>ri[k])k=j; if(k!=i) {t=ri[i];ri[i]=ri[k];ri[k]=t;} ......(略) } } 这个程序的执行过程是(只说明第一个执行过程):先设定k的值为i(也就是0);然后将ri[0](也就是数组中第一个值)逐一的到以ri[1]开始的循环体中去进行比较.最终k的值将为该数组中最大值的那个数组.接着,将k的值与第一个值(也就是0)去进行比较 ;如果不相等;则将其两个数组进行互换. 注:这种方法之所以称为"选择法",是因为谭浩强教授主编的<C程序设计>的课本上是这样描述的.之所以为什么称之为"选择法";我看不去其中的缘由.望知道的网友能够给"选择法"下一个明确的定义".并能对这个例程为什么是采用"选择法"(这个例程是书本上例10.8进行改篇的)做出解释.非常感谢!
6.细分法<2004.9.29> 我给它下的定义是:为了实现某一个强大的功能;将其细化成许多子问题;然后再重新在主函数中进行组合;以最终得到一个完整的结果值. 一般来说,细分法也就是"子函数实现".所以我就不举例说明了.我相信;解决问题的算法一定不只有这几种. 在<C程序设计>中的第二章对"算法"的定义是"为解决一个问题提供的方法."在自然界中,对"算法"的划分分为"数值算法"和"非数值算法"两种.但是,我觉得不管是那一种的实现"问题的算法",你首先必须对问题的大致进行的过程必须有个了解.至少,C语言说到底它仅仅只是一个解决问题的工具. 比如说,你要求输入一个华氏度,求出摄氏温度;那你就必须要了解它们之间的的规律.也就是说你必须知道它们之间的转化公式是: 摄氏度=5/9(华氏度-32).要不然,你用再精练的语言也是难以实现的. 我的这篇贴子也相信一定有很多很多不完善的地方.但是,我真心的希望通过这篇贴子一起个头;将大家的兴趣都带动起来,各自将自己知道的认为是可行的通用的算法都提供出来,让我们大家一起在成长中学习. 2004.9.29 晚于清华泰豪软件学院 (本文完!)
--------------------------------------------------
个人主页:wwweye.126.com
QQ:4360538
--------------------------------------------------
[此贴子已经被作者于2004-10-05 23:58:24编辑过]