当前课程知识点:C语言程序设计(上) >  选择结构的程序设计 >  3.2 路径中的再选择——嵌套判断 >  3.2.1_2三个数排序1029

返回《C语言程序设计(上)》慕课在线视频课程列表

3.2.1_2三个数排序1029在线视频

3.2.1_2三个数排序1029

下一节:例程

返回《C语言程序设计(上)》慕课在线视频列表

3.2.1_2三个数排序1029课程教案、知识点、字幕

我们讨论了abc三个数据的交换

大家看见它

前面我们讨论过 它判断了5次

有6组输出

就是6个printf被调用

那我们能不能做一个优化呢

这个流程图是给了一组形式的优化

那么这个优化的总体思路是什么样呢

那么我们知道输入的abc是无序的

如果我们现在要把它从大到小排出序的话

前边的思路是说

谁大我们把谁放在前边

比如说b大我们把b放在前边

而现在我们的思路是说

无论你abc里边谁大

我把最大的放到a里边

次大的放到b里边 最小的放到c里边

所以 输出就变成了

一个函数调用 abc

所以输入的是abc 输出的还是abc

那么经过了什么呢

经过了在这个过程中的

大小的一个交换

使它排的有序

那这样的话

我们的判断就剩下两个if来完成了

我第一个判断 a小于b吗

如果是这样 a与b进行交换

使得保证a一定是大于b的

那好了 这就很简单

这个交换完了以后

a和b构成了有序ab这样的顺序

那接下来 关心的一个问题

那b比c小吗

也就是说 c是在最后

我要确定c是在最后

还是在第二个的位置

如果b小于c

那就把b与c再交换

那如果不是 那就说明了

ab这个序已经排出来了 c又比b小

这个已经构成了输出abc

如果b小于c的话

交换完了这个序确定了吗 没有啊

a与新的这个b再作比较

a小于新的这个被交换过来的这个b吗

如果是的 那就说

目前的a不是最大的 是要跟b再交换

否则 已经构成了新的abc

这次交换完了以后

这条线上 它已经是新的abc

我们看一下这个 在这个流程里边

我们是用交换来解决的问题

每一个交换这里边

实际上构成了不是一个双选择

都是一个单选泽

if做了一次判断 交换吗

交换还是继续往下走

那在这块 蓝颜色标识的这块

也是一样 b小于c吗

如果是的 要进行交换

a再小于新的b吗

如果是的 再进行下一次的交换

也就说蓝颜色标识出来的这个块

是一个大的if块

那对b小于c这个判断来说

这个if块 是一个块

否则else这块 并没有做什么

是顺序往下走的

所以只有两个单选泽的if

好了我们看这个程序是不是这样

按照我们对等过来

这是粉颜色的a小于b吗

如果是的 进行交换

交换完了 到哪去了呢

交换完了 这件事情

到下边的顺序结构的下一个if

那这if里边有一个红颜色的块

你要进行交换吗 还是不交换

如果b不小于c

那就不需要交换了 我们就直接输出

我们看输出printf只有一个

大家看到这个程序 比我们前边的

5次选择的那个就优化了很多

程序就变得简单

那我们运行一下这个程序看一下

这是我们原来没有优化的这个程序

我们应该怎么做修改呢

看是不是应该这样

我们在这块 整个这块的东西就不需要了

不是说a大于b吗

是因为if块里边是需要交换的

换个号 说我假定你a大

a小于b吗 如果是的我们要交换

怎么交换呢 咱们前边知道

交换是需要借助一个中间变量的

比如说我们先把a里边的东西放到t里边

那这样 前边我们是不是要做一个工作

预订一个t 然后这是一个临时变量

下边再做什么呢

把b送到a里边

那下面再做什么呢

把t送回到b里边

这件事情完成了 花括弧在这

那我们下边这个if

是一个顺序结构的 if

那这块应该判断的是 b和c的关系

b小于c吗 按照我们刚才说的

要确定c的位置

那在这里边应该是一个

这个printf也是不要了我们反正只要最后的

所有判断完了 无论是第一个到了下边

还是就是无论是这个过程里

哪个到了下边我们只有一个输出

所以它放在最后的花括弧的外边

那在这里边 我们判断c的

c和b比较的时候

那这里边也是一样 需要一个交换

这时候是 一定是 b和c进行交换的

就说b比c小的话

同样我们借助这个中间变量把它搁在这

然后呢 先把b放进去

然后呢 再把c再放到b里边

然后呢再把c里边 把刚才的t放回来

如果b小于c做了这样的交换

交换完了 现在我们刚才说的有问题呀

新的b产生了 它和a之间需要再一次的判断

那么它和a之间的再一次的判断

跟这个句子是差不多的

我们把它复制下来 先把后边的这个删掉

那这里边判断的是谁呢

是a和b

同样做的是a和b的判断

因为现在有了新的b

那么这时候 我交换的是什么呢

也是借助了t做a与b的交换

和这个句子是一样的

如果咱现在想要的是从大到小

那我们现在要看的是abc了

我给三个数

那现在呢这块都是一个单选泽的结构

而且 去掉了三个判断

只增加了这种赋值的这种交换

就会看上去又简洁

实际上程序的运行效率也提高了很多

C语言程序设计(上)课程列表:

从问题到C语言程序设计

-1.1 计算机的问题求解方法

--1.1.1--程序设计面向的问题

--1.1.2--关于计算

--1.1.3-1关于算法-算法的特征

--1.1.3-2关于算法——算法的表示

--1.1.3-3关于算法——算法的优化

--1.1.4-1-程序设计方法

--1.1.4-2-程序设计方法

--讨论题:数学模型

-1.1 计算机的问题求解方法--作业

-1.2 C语言与C程序

--1.2.1-1-C概述

--1.2.1-2-C概述

--1.2.2-C初步

--讨论题:运算符

-1.3 C语言处理系统与程序调试运行

--1.3.1C程序如何调试运行

--1.3.2常用C语言处理系统

--1.3.3DEVC++的使用-v1

--1.3.4C语言概貌小程序

--例程

-1.4 程序中的人机交互

--1.4 printf用法

--1.4.2 scanf的用法

--例程

--作业讨论区

数据计算实现与顺序结构程序设计(一)

-2.1 算术运算的C程序实现

--2.1.1 第二章

--2.1.2 C语言算术表达式概念

--2.1.3 算术运算的实现

--2.1.4 整数相除

--2.1.5 输入格式造成的计算错误

--2.1.6 求余运算

--2.1.7 自增自减运算

--2.1.8 复合运算

--fangcheng.c

--fangcheng-1.c

--fangcheng-2.c

--fangcheng-3.c

--fangcheng-4.c

--算术混合运算.c

--讨论题:自增自减符

--讨论题:程序输出结果

--讨论题:程序运行结果

-2.1 算术运算的C程序实现--作业

-2.2 关系运算的C程序实现

--2.2.1 关系比较问题

--2.2.2 C语言关系表达式

--2.2.3关系运算优先级

--2.2.4 用关系运算做判断条件

--2.2.5 程序实例

--2.2.6 字符比较

--bukao.c

--pingshifen-1.c

--panduanzhengshu.c

--pingshifen-2.c

--字符比较.c

--讨论题:比较大小

--讨论题:程序的运行

-2.2 关系运算的C程序实现--作业

-第二周作业--作业

数据计算实现与顺序结构程序设计(二)

-2.3 逻辑运算的C程序实现

--2.3.1 逻辑运算问题~1

--2.3.2 逻辑运算表达式

--2.3.3 如何判断闰年

--2.3.4 逻辑运算优先级

--2.3.5 条件运算符

--计算结合性

--2.3.7 一个简单实例

--闰年.c

--自动购票问题.c

--讨论题:逻辑表达式

-2.3 逻辑运算的C程序实现--作业

-2.4 位运算的C程序实现

--2.4.1 什么是位运算

--2.4.2 位运算有哪些

--2.4.3 位运算怎么用

--讨论题:位运算

-2.5 几种很个别的运算

--2.5 几个很个别的运算

--讨论题

--讨论题

-2.5 几种很个别的运算--作业

-2.6 混合运算及数据类型转换

--2.6 混合运算及数据类型转换

--讨论题:数据类型

-2.7 顺序结构程序实例

--2.7.1 第一个程序:三角形

--Video

--三角形面积.c

--讨论题:工业产值

--讨论题:程序无效结果

-2.7 顺序结构程序实例--作业

选择结构的程序设计

-3.1 程序中的路径选择实现

--3.1.1_1 第三章

--3.1.1_2 神奇的if_else

--打印学生成绩.c

--一元二次方程.c

-3.1 程序中的路径选择实现--作业

-3.2 路径中的再选择——嵌套判断

--3.2.1_1 if语句的嵌套

--3.2.1_2三个数排序1029

--例程

--3.2.2 用户登录检查

--三个数排序_未优化.c

--三个数排序_优化.c

--讨论题:程序改错

-3.2 路径中的再选择——嵌套判断--作业

-3.3 复杂判断问题的C程序设计

--3.3 多级选择

--银行存款.c

--讨论题:多级选择

-3.4 多分支问题的C程序设计

--3.4.1 switch语句表达式

--3.4.2 加减乘除计算

--3.4.3 几类说明

--加减乘除运算.c

--讨论题:关于switch

-3.4 多分支问题的C程序设计--作业

-3.5 GOTO的适当使用

--3.5 GOTO的适当使用

-3.6 选择结构的程序实例

--3.6 程序展示

--计算第几天.c

--存款利息__switch实现.c

--讨论题:输出奇数

--讨论题:计算税金

-3.6 选择结构的程序实例--作业

-第四周作业--作业

循环结构的程序设计(一)

-4.1 需要重复执行的程序

--4.1.1----第四章~1

--4.1.2---while实现先判断后循环~1

--4.1.3----while循环的应用-录入速度~1

--求和.c

--打印学生成绩.c

--统计录入速度.c

--求平均数.c

-4.1 需要重复执行的程序--作业

-4.2 至少要执行一次的循环

--4.2.1至少要执行一次的循环

--4.2.2-do-while循环应用

--成绩录入_do while实现.c

--n的阶乘.c

--字符分类统计.c

--讨论题:关于while

-4.2 至少要执行一次的循环--作业

-4.3 已知循环次数用for语句

--4.3.1--用for语句控制循环次数

--4.3.2--循环的应用-求和

--求和问题.c

--斐波那契数列问题.c

--数列求和.c

--讨论题:循环语句的不同

--讨论题:循环语句

-4.3 已知循环次数用for语句--作业

-4.4 循环控制——简单循环应用

--4.4.1-循环的应用-找数-水仙花数

--4.4.2--循环的应用-求素数

--水仙花数.c

--讨论题:死循环

--讨论题:continue和break

--讨论题:猜数字

-循环结构的程序设计(一)--4.4 循环控制——简单循环应用

循环结构的程序设计(二)

-4.5 循环的嵌套

--4.5.1 循环的嵌套——九九乘法表

--4.5.2 循环的嵌套——打印三角形

--打印九九乘法表.c

--打印实心三角图案.c

--打印空心三角图案.c

--讨论题:程序运行

-4.5 循环的嵌套--作业

-4.6 break与continue

--4.6 循环中断与继续循环——break再讨论

--最大素数.c

--求正数个数及平均数.c

-4.6 break与continue--作业

-4.7 循环的综合应用

--4.7.1 数的排列组合问题

--4.7.2 循环综合应用——穷举算法

--4.7.3 循环综合应用——满足条件的数

--4.7.4 循环综合应用——求最后三位数

--4.7.5 循环综合应用——打印空心图案

--数的排列组合.c

--数的排列组合优化.c

--鸡兔同笼.c

--找满足条件的数.c

--输出14的13次方的最后三位数.c

--打印空心字符.c

--讨论题:打印图形

--讨论题:打印空心图形

--讨论题:计算闰年

-第六周作业

--虚拟实验:循环程序设计实验

-第六周作业--作业

数组(一)

-5.1 同类有序数据处理问题

--5.1.0 数组开篇

--5.1.1 同类有序数据存储问题

--讨论题:下标变量与下标

-5.2 一维数组的定义和引用

--5.2.1_1 数组的定义~1

--5.2.1_2 数组的初始化

--5.2.2 一维数组的输入输出

--5.2.3 一维数组的应用1--成绩排序(选择法)~2

--5.2.4 一维数组的应用2--Fibonacci数列

--数组定义.c

--数组初始化.c

--输出大于平均值的数.c

--反向输出.c

--选择法_成绩排序.c

--求斐波那契数列前n项.c

--讨论题:对称数

--讨论题:关于'\0'

-5.2 一维数组的定义和引用--作业

-5.3 一维字符串数组

--5.3 一维字符串数组11.24~1

--用函数测试字符串长度.c

--讨论题:编程

-5.4 字符串处理函数

--5.4 字符数组的输入与输出

--字符串反向.c

--字符串函数

--讨论题:程序如何运行

--讨论题:黑色星期五

数组(二)

-5.5 二维数组的定义与使用

--5.5 二维数组定义

--二维数组的定义与初始化.c

-5.6 二维数组的输入输出

--5.6 二维数组的输入与输出

--二位数组输出_矩阵输出.c

--讨论题:随机数据存储

-5.6 二维数组的输入输出--作业

-5.7 二维数组的应用‍

--5.7.1二维数组的应用-转置矩阵

--5.7.2 用一维数组方式引用二维数组元素

--转置矩阵.c

--找二维数组最大数.c

--讨论题:修改程序

--讨论题:关于随机数函数 rand()

-5.8 二维字符数组

--5.8 单词排序

--单词排序.c

--讨论题:回文字符串

-5.8 二维字符数组--作业

-5.9 数组综合应用

--5.9.1 应用1——学生成绩统计

--统计成绩.c

--5.9.2 应用2——删除重复字符

--删除串中的重复字符串

--5.9.3 应用3——统计字符

--5.9_4数组的应用4--矩阵相乘

--统计字符次数.c

--讨论题:洗牌

-本期课程结束语

--end

-第八周编程作业

--虚拟实验:冒泡排序算法程序设计实验

期末复习

-《C语言程序设计(上)》期末复习参考

--html

期末复习答案

-《C语言程序设计(上)》期末复习参考答案

--html

3.2.1_2三个数排序1029笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。