2023-04-21 学习记录--C/C++-实现升序降序(冒泡法/沉底法)
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻
一、冒泡法(沉底法) —— 升序 ⭐️
(一)、思路
从左到右:
- 1、第一个与第二个比较,若第一个
>
第二个,就交换位置;再第二个与第三个比较,若第二个>
第三个,就交换位置;再第三个。。。直至把最大项
放到了最后一个
;- 2、除去最后一个数,再重复第一步,直至把
倒数第二大的数
放到倒数第二个
;- 3、除去倒数第二个数,再重复第一步,直至把
倒数第三小的数
放到倒数第三个
;
。。。
依次类推,达到升序,因为升序
是由小到大
排序。
(二)、举例一
需求:将
83
,96
,72
,35
,24
五个数使用冒泡法(沉底法)
实现升序(由小到大排序)。
注意:如下代码里的
4
=数组总长度-1
、5
=数组总长度
,其实可以直接用数组总长度
进行替换,我这里之所以写成数字,只是为了方便逻辑解释哦~
/*** 将 83, 96, 72, 35, 24 五个数使用冒泡法(沉底法)实现升序(由小到大排序)。*/#include <stdio.h>
int main()
{/** 使用变量前必须先定义 */int a[5] = {83, 96, 72, 35, 24}; // 自定义一个含5个整数的数组aint i, j, t; // t: 交换数组元素位置的中间变量/** 使用冒泡法(沉底法)实现升序 */// 第一层循环(循环4次,i=0,1,2,3)for (i = 0; i < 4; i++)// 第二层循环(循环4-i次)for (j = 0; j < 4 - i; j++)// 第二层循环的循环体(若相邻两项中 左项>右项,则交换位置,因为升序是由小到大排序滴)if (a[j] > a[j + 1]){t = a[j];a[j] = a[j + 1];a[j + 1] = t;}/** 输出结果 */printf("最终结果为:\\n"); // 提示信息for (i = 0; i < 5; i++)printf("%d\\t", a[i]); // for循环依次输出最终数组里的值printf("\\n"); // 注意:这里必须单独提一个输出语句来输出换行符(\\n),不然末尾默认会被加上符号“%”/** 程序正常运行结束 */return 0;
}
(三)、举例二
需求:输入
10
个地区的面积(面积为整数
),使用冒泡法(沉底法)
对它们由小到大排序
并输出排序后的结果。
/*** 需求:输入10个地区的面积(面积为整数),使用冒泡法(沉底法)对它们由小到大排序并输出排序后的结果。*/
#include <stdio.h>
int main()
{/** 使用变量前必须先定义 */int a[10]; // 定义一个包含10个整数的数组aint i, j, t;/** 让用户输入10个面积 */printf("请输入10个面积:\\n"); // 提示信息for (i = 0; i < 10; i++)scanf("%d", &a[i]); // 用户输入,并将输入结果依次赋值给数组a里的各数组元素/** 使用冒泡法(沉底法)实现升序 */// 第一层循环(循环9次)for (i = 0; i < 9; i++)// 第二层循环(循环9-i次)for (j = 0; j < 9 - i; j++)// 第二层循环的循环体if (a[j] > a[j + 1]){t = a[j];a[j] = a[j + 1];a[j + 1] = t;}/** 输出结果 */printf("排序后的面积依次是:\\n"); // 提示信息for (i = 0; i < 10; i++)printf("%d\\t", a[i]); // 依次输出printf("\\n"); // 注意:这里必须单独提一个输出语句来输出换行符(\\n),不然末尾默认会被加上符号“%”/** 程序正常运行结束 */return 0;
}
二、冒泡法(沉底法) —— 降序 ⭐️
(一)、思路
从左到右:
- 1、第一个与第二个比较,若第一个
<
第二个,就交换位置;再第二个与第三个比较,若第二个<
第三个,就交换位置;再第三个。。。直至把最小项
放到了最后一个
;- 2、除去最后一个数,再重复第一步,直至把
倒数第二小的数
放到倒数第二个
;- 3、除去倒数第二个数,再重复第一步,直至把
倒数第三小的数
放到倒数第三个
;
。。。
依次类推,达到降序,因为降序
是由大到小
排序。
(二)、举例
需求:将
83
,96
,72
,35
,24
五个数使用冒泡法(沉底法)
实现降序(由大到小排序)。
注意:如下代码里的
4
=数组总长度-1
、5
=数组总长度
,其实可以直接用数组总长度
进行替换,我这里之所以写成数字,只是为了方便逻辑解释哦~
/*** 将 83, 96, 72, 35, 24 五个数使用冒泡法(沉底法)实现降序(由大到小排序)。*/#include <stdio.h>
int main()
{/** 使用变量前必须先定义 */int a[5] = {83, 96, 72, 35, 24}; // 自定义一个含5个整数的数组aint i, j, t; // t: 交换数组元素位置的中间变量/** 使用冒泡法(沉底法)实现降序 */// 第一层循环(循环4次,i=0,1,2,3)for (i = 0; i < 4; i++)// 第二层循环(循环4-i次)for (j = 0; j < 4 - i; j++)// 第二层循环的循环体(若相邻两项中 左项<右项,则交换位置,因为降序是由大到小排序滴)if (a[j] < a[j + 1]){t = a[j];a[j] = a[j + 1];a[j + 1] = t;}/** 输出结果 */printf("最终结果为:\\n"); // 提示信息for (i = 0; i < 5; i++)printf("%d\\t", a[i]); // for循环依次输出最终数组里的值printf("\\n"); // 注意:这里必须单独提一个输出语句来输出换行符(\\n),不然末尾默认会被加上符号“%”/** 程序正常运行结束 */return 0;
}
三、总结 ⭐️
如下是我自己通过反复敲代码验证,画出的构图和梳理的归纳总结🌈,如若有幸可以帮到各位小可爱,我会很开心滴哦;如若有小可爱发现错误,也欢迎评论区指证一下哦,谢谢啦~ 💐
这篇笔记主要是为了对
升序降序的处理思维
做一个梳理,代码可能没那么多高端操作,嘿嘿~