
1.2 算法的概念
日常生活中,无论做什么事情都要有一定的步骤,算法是为解决一个问题而采取的方法和步骤。计算机算法是计算机为解决某一问题而采取的方法。计算机算法可以分为两大类:数值运算算法和非数值运算算法。数值运算算法的目的是求数值解,如方程的根、定积分等。非数值运算算法主要用于管理领域,如文字处理、图形图像处理、信息检索、信息管理等。
无论采用何种程序设计语言解决问题,算法永远是程序设计的核心,只要设计好了算法,就可以使用程序设计语言来实现。由此可见,算法在程序设计中起着举足轻重的作用,著名计算机科学家尼·沃思曾提出一个公式:
数据结构+算法=程序
数据结构是对数据的描述,在程序中指定数据的类型和数据的组织形式。同一问题可以有多个不同算法,这些算法有优劣之分,要在保证算法正确性的前提下,使算法的效率和速度更快,所以应该尽量设计正确且高效的算法。下面将通过几个算法实例,来了解算法的概念和特点。
【例1.1】求1×2×3×4×5。
【解】算法主要步骤如下:
(1)先求1×2,得到结果2。
(2)将步骤(1)得到的结果2乘以3,得到结果6。
(3)将6再乘以4,得24。
(4)将24再乘以5,得120。
(5)输出120。
(6)结束。
本算法虽然正确,却过于烦琐,缺乏通用性,可以通过引入中间变量存放计算结果来简化算法,使得算法通用性更好。步骤如下:
(1)使1→t,将数值1存放于t中。
(2)使2→i,将数值2存放于i中。
(3)使t×i的乘积仍然存放于变量t中,表示为t×i→t。
(4)使i的值+1,即i+1→i。
(5)如果i≤5,返回步骤(3),否则转入步骤(6)。
(6)输出t。
说明:此处i和t称为变量,即名字为i和t的内存,用于存取数据,如图1-2所示。

图1-2 变量
如果要求n!,只要在步骤(1)前增加步骤(0)输入n的值,再将算法中步骤(5)的i≤5改为i≤n,使得上限不再是一个固定的数字即可。
【例1.2】有A和B两个数,将A和B中的数据互换。
【解】算法主要步骤如下:
(1)A→C。
(2)B→A。
(3)C→B。
(4)输出A和B。
算法执行过程如图1-3所示,需要借助一个中间变量C。另有一个不需要借助中间变量的算法,实现步骤如下:
(1)A+B→A。
(2)A-B→B。
(3)A-B→A。
(4)输出A和B。

图1-3 A和B交换过程
学习提示:解决问题不一定只有一种算法,重要的是选择最适合的算法。权衡算法的质量,主要考虑算法的时间效率和空间效率。
【例1.3】判断某一年份是否闰年。闰年的判定条件是:
(1)能被4整除,但不能被100整除。
(2)能被100整除,又能被400整除。
【解】假设要判断的年份存放在year中,算法的主要步骤如下:
(1)如果year不能被4整除,则输出year“不是闰年”,转入步骤(4)。
(2)如果year能被4整除,不能被100整除,则输出year“是闰年”,转入步骤(4)。
(3)如果year能被100整除,又能被400整除,则输出year“是闰年”,转入步骤(4)。
(4)结束。