数值算法与非数值算法
A. (2)非数值计算常用经典算法
1、交换(两量交换借助第三者) 不借助第三个变量
参考:
http://blog.csdn.net/hackbuteer1/article/details/6531775
2、累加
累加算法的要领是形如“s=s+A”的累加式,此式必须出现在循环中才能被反复执行,从而实现累加功能。“A”通常是有规律变化的表达式,s在进入循环前必须获得合适的初值,通常为0。
例如:求1+2+3+……+100的和。
sum=0;i=1;
sum=sum+i;
i++;
3、累乘
累乘算法的要领是形如“s=s*A”的累乘式,此式必须出现在循环中才能被反复执行,从而实现累乘功能。“A”通常是有规律变化的表达式,s在进入循环前必须获得合适的初值,通常为1。
例如:求10!
n=10;sum=1;
n>0
sum=sum*n;
n--;
也称为“枚举法”,即将可能出现的每一种情况一一测试,判断是否满足条件,一般采用循环来实现。
例如:用穷举法输出所有的水仙花数(即这样的三位正整数:其每位数位上的数字的立方和与该数相等,比如:13+53+33=153)。
参考:
http://www.cnblogs.com/fanyong/archive/2012/03/23/2413559.html
http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html
冒泡排序
假设要对含有n个数的序列进行升序排列,冒泡排序算法步骤是:
1、从存放序列的数组中的第一个元素开始到最后一个元素,依次对相邻两数进行比较,若前者大后者小,则交换两数的位置;
2、第一趟结束后,最大数就存放到数组的最后一个元素里了,然后从第一个元素开始到倒数第二个元素,依次对相邻两数进行比较,若前者大后者小,则交换两数的位置;
3、重复步骤1 n-1趟,每趟比前一趟少比较一次,即可完成所求。
(2)选择法排序
选择法排序是相对好理解的排序算法。假设要对含有n个数的序列进行升序排列,算法步骤是:
1、从数组存放的n个数中找出最小数的下标(算法见下面的“求最值”),然后将最小数与第1个数交换位置;
2、除第1个数以外,再从其余n-1个数中找出最小数(即n个数中的次小数)的下标,将此数与第2个数交换位置;
3、重复步骤1 n-1趟,即可完成所求。
(3)插入法排序
要想很好地掌握此算法,先请了解“有序序列的插入算法”,就是将某数据插入到一个有序序列后,该序列仍然有序。插入法排序的要领就是每读入一个数立即插入到最终存放的数组中,每次插入都使得该数组有序。
参考:
http://www.cnblogs.com/fanyong/archive/2012/03/23/2413553.html
**(4)归并排序 **
即将两个都升序(或降序)排列的数据序列合并成一个仍按原序排列的序列。
例如:有一个含有6个数据的升序序列和一个含有4个数据的升序序列,将二者合并成一个含有10个数据的升序序列。
参考: http://blog.csdn.net/cwj649956781/article/details/7409635
(1)顺序查找(即线性查找)
顺序查找的思路是:将待查找的量与数组中的每一个元素进行比较,若有一个元素与之相等则找到;若没有一个元素与之相等则找不到。
例如:任意读入10个数存放到数组a中,然后读入待查找数值,存放到x中,判断a中有无与x等值的数。
(2)折半查找(即二分法)
顺序查找的效率较低,当数据很多时,用二分法查找可以提高效率。使用二分法查找的前提是数列必须有序。
二分法查找的思路是:要查找的关键值同数组的中间一个元素比较,若相同则查找成功,结束;否则判别关键值落在数组的哪半部分,就在这半部分中按上述方法继续比较,直到找到或数组中没有这样的元素值为止。
例如:任意读入一个整数x,在升序数组a中查找是否有与x等值的元素。
参考: http://blog.csdn.net/shuilan0066/article/details/7608096
B. 算法等同于计算方法
算法不等同于计算方法。
算法的定义为解决问题确定的方法和有限的步骤。
而算法分为两大类:数值运算算法和非数值运算算法。计算方法中并不包括非数值运算算法,因此算法不等同于计算方法,当然啦 这是在计算机学中的定义,不同地方将有不同的意义,若是仅仅谈数学上的算法,确实与计算方法相似。
纯手打,希望能帮到你~