没有合适的资源?快使用搜索试试~ 我知道了~
C语言常用算法归纳.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 77 浏览量
2021-10-05
11:33:02
上传
评论
收藏 156KB DOC 举报
温馨提示
试读
21页
C语言常用算法归纳.doc
资源推荐
资源详情
资源评论
. -
C 语言常用算法归纳
应当掌握的一般算法
一、根本算法:
交换、累加、累乘
二、非数值计算常用经典算法:
穷举、排序〔冒泡,选择〕、查找〔顺序即线性〕
三、数值计算常用经典算法:
级数计算〔直接、简接即递推〕、一元非线性方程求根〔牛顿迭代法、二分法〕、定积
分计算〔矩形法、梯形法〕
四、其他:
迭代、进制转换、矩阵转置、字符处理〔统计、数字串、字母大小写转换、加密等〕、
整数各数位上数字的获取、辗转相除法求最大公约数〔最小公倍数〕、求最值、判断素数
〔各种变形〕、数组元素的插入〔删除〕、二维数组的其他典型问题〔方阵的特点、杨辉三
角形〕
详细讲解
一、根本算法}
1.交换〔两量交换借助第三者〕
例 、任意读入两个整数,将二者的值交换后输出。
. .zj.
. -
【解析】程序中加粗局部为算法的核心,如同交换两个杯子里的饮料,必须借助第三个
空杯子。
假设输入的值分别为 、,那么第一行输出为 ,;第二行输出为 ,。
其中 为中间变量,起到“空杯子〞的作用。
注意:三句赋值语句赋值号左右的各量之间的关系!
【应用】
例 、任意读入三个整数,然后按从小到大的顺序输出。
以下两个 语句使得 中存放的数最小
以下 语句使得 中存放的数次小
2.累加
累加算法的要领是形如“!"〞的累加式,此式必须出现在循环中才能被反复执行,
从而实现累加功能。“"〞通常是有规律变化的表达式, 在进入循环前必须获得适宜的初值,
通常为 #。
例 、求 !!!$$!## 的和。
#
%&'()##
!累加式
!特殊的累加式
!!!***!##
【解析】程序中加粗局部为累加式的典型形式,赋值号左右都出现的变量称为累加器,
其中“!〞为特殊的累加式,每次累加的值为 ,这样的累加器又称为计数器。
3.累乘
. .zj.
. -
累乘算法的要领是形如“"〞的累乘式,此式必须出现在循环中才能被反复执行,
从而实现累乘功能。“"〞通常是有规律变化的表达式, 在进入循环前必须获得适宜的初值,
通常为 。
例 、求 #!
+分析,#!---$$-#
'./
%&'()#
累乘式
!
***#'
二、非数值计算常用经典算法
1.穷举
也称为“枚举法〞,即将可能出现的每一种情况一一测试,判断是否满足条件,一般采
用循环来实现。
例 、用穷举法输出所有的水仙花数〔即这样的三位正整数:其每位数位上的数字的立
方和与该数相等,比方:!000!0〕。
+法一,
1/
.1##1)2221!!
/1#1##1##
!!///11
【解析】此方法是将 ## 到 222 所有的三位正整数一一考察,即将每一个三位正整数
的个位数、十位数、百位数一一求出〔各数位上的数字的提取算法见下面的“数字处理〞〕 ,
算出三者的立方和,一旦与原数相等就输出。共考虑了 2## 个三位正整数。
+法二,
/
.)2!!
.#)2!!
./#/)2/!!
!!///##!#!/##!#!/
【解析】此方法是用 到 2 做百位数字、# 到 2 做十位和个位数字,将组成的三位正整
数与每一组的三个数的立方和进展比拟,一旦相等就输出。共考虑了 2## 个组合〔外循环
. .zj.
. -
单独执行的次数为 2,两个内循环单独执行的次数分别为 # 次,故 语句被执行的次数为
2-#-#2##〕,即 2## 个三位正整数。与法一判断的次数一样。
2.排序
〔〕冒泡排序〔起泡排序〕
假设要对含有 个数的序列进展升序排列,冒泡排序算法步骤是:
3 从存放序列的数组中的第一个元素开场到最后一个元素,依次对相邻两数进展比拟,
假设前者大后者小,那么交换两数的位置;
4 第①趟完毕后,最大数就存放到数组的最后一个元素里了,然后从第一个元素开场到
倒数第二个元素,依次对相邻两数进展比拟,假设前者大后者小,那么交换两数的位置;
5 重复步骤① 6 趟,每趟比前一趟少比拟一次,即可完成所求。
例 、任意读入 # 个整数,将其用冒泡法按升序排列后输出。
7(8(#
+,9
.#)!!
+,
.99)69!! 个数处理 6 趟
.#)669!!每趟比前一趟少比拟一次
+, +!,+,+,+!,+!,
.#)!!+,
〔〕选择法排序
选择法排序是相对好理解的排序算法。假设要对含有 个数的序列进展升序排列,算法
步骤是:
3 从数组存放的 个数中找出最小数的下标〔算法见下面的“求最值〞〕,然后将最小
数与第 个数交换位置;
4 除第 个数以外,再从其余 6 个数中找出最小数〔即 个数中的次小数〕的下标,
将此数与第 个数交换位置;
5 重复步骤① 6 趟,即可完成所求。
例 、任意读入 # 个整数,将其用选择法按升序排列后输出。
7(8(#
+,9:
.#)!!+,
.#)6!!处理 6 趟
:总是假设此趟处理的第一个〔即全部数的第 个〕数最小,: 记录其下
标
.9!9)9!!
+9,)+:,:9
:;+,+,+:,+:,
.#)!!
. .zj.
. -
+,
〔〕插入法排序
要想很好地掌握此算法,先请了解“有序序列的插入算法〞,就是将某数据插入到一个
有序序列后,该序列仍然有序。插入算法参见下面的“数组元素的插入〞。
例 、将任意读入的整数 1 插入一升序数列后,数列仍按升序排列。
7(8(#
+,6<2=219:注意留一个空间给待插数
1
1 +6,+6,1比最后一个数还大就往最后一个元素中存放
('(查找待插位置
9#
%&'(9)61 +9,
9!!
.:6: 9:66从最后一个数开场直到待插位置上的数依次后移一位
+:!,+:,
+9,1插入待插数
.9#9)69!!+9,
插入法排序的要领就是每读入一个数立即插入到最终存放的数组中,每次插入都使得该
数组有序。
例 、任意读入 # 个整数,将其用插入法按降序排列后输出。
〔提示:将第 至第 # 个数一一有序插入到数组 中〕
7(8(#
+,9:1
+#,读入第一个数,直接存到 +#,中
.99)9!!将第 至第 # 个数一一有序插入到数组 中
1
1)+96,+9,1
比原数列最后一个数还小就往最后一个元素之后存放新读的数
('(以下查找待插位置
#
%&'(1)+,)96!!
以下 . 循环从原最后一个数开场直到待插位置上的数依次后移一位
.:96: :66+:!,+:,
+,1插入待插数
.#)!!+,
. .zj.
剩余20页未读,继续阅读
资源评论
pyhm63
- 粉丝: 6
- 资源: 20万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功