算法简介:
一、数据结构与算法的关系
虽然本门课程叫“数据结构”,但经常会讲到算法,以及它们之间的关系。在市面上也经常有诸如“数据结构与算法分析”这样名字的书。
实际上,数据结构与算法是依存关系。只谈数据结构而抛弃算法,则数据是“死”的,没有活力的;只谈算法而抛弃数据结构,则算法无法有所依赖的操作对象,只是空谈。对于程序来说,数据结构赋予其血肉骨骼,算法赋予其灵魂思想,二者合一才是完整的程序,二者缺一不可。因此,我们在学习数据结构的时候,经常要学习算法的相关知识。
二、算法定义
定义:算法(Algorithm):算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个动作。
对于给定的问题,是可以有多种算法来解决的。
现实世界中问题千奇百怪,算法当然也就千变万化,没有通用的算法可以解决所有的问题。甚至对于一些问题,优秀的算法却不见得适合它。(例如,对于数据量较少(万以下)的数据排序,快速排序算法的执行效率并没有比冒泡排序快上很多。)
算法示例:辗转相除法求两个正整数的最大公约数
辗转相除法,又名欧几里得算法(Euclidean algorithm),3000年前由欧几里得在其著作《几何原本》中提出,是世界上已知最古老的算法。
算法描述:设两数为a、b(a>b),求最大公约数的步骤如下:
⒈用a除以b,得到其商q和余数r
⒉若r=0,则最大公约数就是b,算法结束
⒊若r!=0,则令a=b,b=r
⒋循环执行,回到步骤1
代码描述:
/************
*函数Euclidean_algorithm()
*入参:两个整数int m,int n
*返回值:两数的最大公约数
*功能:计算两个数的最大公约数
**************/
int Euclidean_algorithm(int m,int n)
{
int r;
do{
r=m%n;
m=n;