//冒泡排序
//外层循环表示排的次数
//内层循环表示每次的比较数据
#include <stdio.h>
int main() {
// 初始化一个包含 10 个整数的数组
int arr[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
// 使用冒泡排序算法对数组进行排序
for (int i = 0; i < 9; i++)
{
// 外循环,控制比较轮数,因为每次最大的数都会沉到最后,所以只需要比较 n-1 轮即可
for (int j = 0; j < 10 - 1 - i; j++)
{
// 内循环,控制每轮比较的次数,每轮比较相邻的两个数
if (arr[j] > arr[j + 1])
{
// 如果前一个数大于后一个数,就交换它们的位置,使得较大的数往后移动
int t = arr[j];
// 临时变量 t 用于交换两个数的值
arr[j] = arr[j + 1];
// 将后一个数赋值给前一个数
arr[j + 1] = t;
// 将临时变量中存储的前一个数的值赋值给后一个数,完成交换
}
}
}
// 打印排序后的数组
for (int i = 0; i < 10; i++)
{
printf("%d\t", arr[i]); // 以制表符分隔的形式打印数组中的每个元素
}
return 0;
}
//疑点1
//为什么第一个for循环中,循环次数是9(i<9)
//模拟一下循环过程
//第一轮循环:
//在第一轮循环中,面对10个数,我们需要进行9次比较
//进行之后,最大的数9已经变到最底部了
//第二论循环中,我们就只需要进行8次比较了,因为第一轮的比较已经将最大的数字沉底
//进行之后,现在最大的数字8也就到了底部
//在这个例子中,我们可以看到在每一轮的循环中,最后一个元素都会背确定为当前轮次的最大值
//因此我们可以在下一轮循环时少进行一次比较
//所以我们循环的表达式设置为i<9
//疑点2
//为什么内层循环,循环的上限是 10-1-i
//10是数组的长度,i是外层循环的当前轮次
//具体来说,假设我们有一个长度为10的数组,当前外层循环的轮次是0
//在第一轮循环结束的时候,数组的最后一个元素已经是最大的了,因此不用参加比较
//所以内层循环的上限就是 10-1-0
//当外层循环进行到第二轮的时候,i=1;
//在第二轮循环结束后,数组的倒数第二大的元素已经是次大,因此不需要再次参加比较
//此时内层循环的上限就是 10-1-1
//类推,随着外层循环的进行,每一轮内层循环的上限都会逐渐减小
C语言----随机输入10个数,从小到大依次排列
最新推荐文章于 2024-05-20 18:16:07 发布