什么是算法,看完本文就彻底明白了!
算法(Algorithm)是解决特定问题的求解步骤,在计算机中表现为有限的一组操作,每一个操作都能完成特定的功能。
例如,求 n 个数中最大者的问题,其算法描述如下:
1) 定义一个数组对象 a 并赋值,用数组中第一个元素初始化 max,即初始时假定第一个数最大。
其中,自然语言描述可以是汉语或英语等文字描述;类语言类似于程序设计语言形式,但是不能直接运行;程序流程图的优点是直观,但是不易直接转化为可运行的程序;采用程序设计语言描述算法,就是直接利用像 Java、Python、C、C++ 等语言来表述,其优点是可以直接在计算机上运行。
例如,判断正整数 m 是否为质数,算法可用以下几种方式描述。

图 1 判断m是否为质数的程序流程图
采用程序流程图描述算法比较直观,可读性强,缺点是不能直接转换为计算机程序,移植性不好。
不难看出,采用自然语言描述算法直观性和可读性不强。
声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
例如,求 n 个数中最大者的问题,其算法描述如下:
1) 定义一个数组对象 a 并赋值,用数组中第一个元素初始化 max,即初始时假定第一个数最大。
int a[]={60,36,12,31,78,93,82,26}; max=a[0];2) 依次把数组 a[] 中其余的 n-1 个数与 max 进行比较,遇到较大的数时,将其赋值给 max。
for(i=0; i < a.length; i++) // for循环处理 // 判断是否满足 max 小于 a[i] 的条件 if(max < a[i]) // 若满足条件,则将 a[i] 赋值给 max max = a[i]; System.out.println("max=:" + max);最后,max 中的数就是 n 个数中的最大者。
算法的5个特性
算法具有以下 5 个特性。1) 有穷性(Finiteness)
有穷性指的是算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。2) 确定性(Definiteness)
算法的每个步骤都具有确定的含义,不会出现二义性。算法在一定条件下只有一条执行路径,也就是相同的输入只能有一个唯一的输出结果。3) 可行性(Feasibility)
算法的每个操作都能够通过执行有限次基本运算完成。4) 输入(Input)
算法具有零个或多个输入。5) 输出(Output)
算法至少有一个或多个输出。输出的形式可以是打印输出,也可以是返回一个或多个值。算法的描述
算法的描述方式有多种,如自然语言、类语言(或称为伪代码)、程序流程图及程序设计语言(如 Java、Python、C、C++)等。其中,自然语言描述可以是汉语或英语等文字描述;类语言类似于程序设计语言形式,但是不能直接运行;程序流程图的优点是直观,但是不易直接转化为可运行的程序;采用程序设计语言描述算法,就是直接利用像 Java、Python、C、C++ 等语言来表述,其优点是可以直接在计算机上运行。
例如,判断正整数 m 是否为质数,算法可用以下几种方式描述。
1) 程序流程图

图 1 判断m是否为质数的程序流程图
采用程序流程图描述算法比较直观,可读性强,缺点是不能直接转换为计算机程序,移植性不好。
2) 自然语言
利用自然语言描述“判断m是否为质数”的算法如下:- 输入正整数m,令i=2。
- 若 i≤ m 的平方根,则令 m 对 i 求余,将余数送入中间变量 r;否则输出“m是质数”,算法结束。
- 判断 r 是否为零。若为零,则输出“m不是质数”,算法结束;若 r 不为零,则令 i 增加 1,转到第二步执行。
不难看出,采用自然语言描述算法直观性和可读性不强。
3) 类语言
类 Java 语言描述如下:void IsPrime() // 判断 m 是否为质数的函数 { input(m); // 输入正整数 m for(i=2; i <= sqrt(m); i++) // for循环处理 { r = m % i; // 求余数 if(r == 0) // 如果 m 能被整除 { print("m不是质数!"); // 输出信息 break; // 退出循环 } } print("m是质数!"); // 输出信息 }
4) 程序设计语言
Java 语言描述如下:// 判断m是否为质数 void IsPrime(){ Scanner sc = new Scanner(System.in); System.out.print("请输入一个正整数:"); // 输出信息 int m = sc.nextInt(); // 输入正整数m for (int i = 2; i <= Math.sqrt(m); i++) // for循环处理 { r = m % i; // 求余数 if (r == 0) // 如果 m能被整除 { System.out.println("m不是质数!"); // 输出信息 break; // 退出循环 } System.out.print("m是质数!"); // 输出信息 }可以看出,类语言的描述除了没有变量的定义、输入和输出的写法外,与程序设计语言的描述差别不大,类语言的描述可以转换为直接运行的计算机程序。
声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。