学《数据结构》越学越聪明--第一章》》》绪论二

算法及其描述

1.2.1什么是算法

对特定问题求解的一种描述,它是指令的有限序列
算法的重要性
  1. 有穷性:在有穷步之后结束,算法能够停机
  2. 确定性:无二义性
  3. 可行性:可通过基本运算有限次执行来实现,也就是算法中每一个动作能够被机械地执行。
  4. 有输出:有数据处理
  5. 有输入:有数据处理
通过把 基于存储结构的运算实现的步骤或过程称为 算法
运算功能描述---->>>基于存储结构--->>>运算功能实现==算法
算法设计目标
  1. 确定性:要求算法能够正确地执行预先规定的功能和性能要求。
  2. 可使用性:要要求算法能够很方便的使用
  3. 可读性:算法应该易于使人理解,也就是可读性好
  4. 健壮性:要求算法具有很好的容错性
  5. 高效率与低存储量需求性:通常算法的效率主要指算法的执行时间,算法存储量指的是算法执行过程中所需的最大存储空间。
算法描述
通常用C/C++来描述算法,格式如下:
返回值  算法对应的函数名(形参列表)
{
临时变量的定义;
实现由输入参数到输出参数的操作
......
}//函数体

其中,返回值通常为bool类型,表示算法是否成功执行,形参列表表示算法的参数,由于包含算法的输入和输出,所以形参列表由输入型参数和输出型参数构成;函数实现算法的功能。
一个算法通常完成某个单一的功能,算法设计的一般步骤如下:

  1. 分析算法的功能
  2. 确定算法有哪些输入,将这些输入设计成输入型参数;确定算法有哪些输出,将这些输出设计成输出型参数
  3. 设计函数体,完成从输入到输出的操作过程
输出型参数的设计
在算法设计时输入型参数非常好设置,那么输出型参数该如何设计呢?我们举例说明一下:
首先我们要设计的是两个值进行交换的算法设计
void swapl(int x,int y)
{
int tmp;
tmp=x;x=y;y=tmp;
}

在函数体中实现了x,y的值进行交换,但是调用该算法swapl(a,b)时发现传参数a,b的值并没有进行交换。出现错误的原因是这里的形参x,y即是输入型参数也是输出型参数,而swapl(x,y)中仅将形参x,y作为输入型参数设计。

改正方法1:采用指针的方式来回传形参的值,将上述函数改为乱下:

void swapl2(int * x,int * y)
{
int tmp;
tmp=* x;  //将x所指的值放在tmp中
* x=* y;  //将x所指的指改为y所指的值
* y=tmp; //将y所指的值改为tmp
}

改正方法2:采用引用型形参,也就是将输出型形参设计为引用类型形参

在C++语言中提供了一种引用运算符“&”。

void swapl3(int & x,int & y)
{
int tmp;
tmp=x;  //将x所指的值放在tmp中
x= y;  //将x所指的指改为y所指的值
 y=tmp; //将y所指的值改为tmp
}
但执行语句swapl3(a,b)时,形、实参的匹配相当于:

```c
int & x=a;  //x为a的引用
int & y=b;  //y为b的引用

这样,a与x共享存储空间,b与y共享存储空间,因此执行函数后a和b的值发生了交换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雷军的小宝贝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值