C语言题目:排序问题2

题目描述

将十个数进行从大到小的顺序进行排列

输入格式

十个整数

输出格式

以从大到小的顺序输出这个十个数

样例输入

复制代码
1 2 3 4 5 6 7 8 9 10

样例输出

复制代码
10 9 8 7 6 5 4 3 2 1

代码解析

1. 引入头文件

代码首先引入了stdio.h头文件,这是C语言标准输入输出库,用于处理输入输出函数。

2. 主函数定义

main函数是程序的入口点,它没有接收任何参数,也没有返回值。

3. 定义数组和变量

main函数内部,定义了以下变量:

  • int arr[10];:一个整型数组,用于存储用户输入的10个整数。
  • int temp;:一个整型变量,用于在排序过程中交换元素。
  • int p = 0;:一个标志变量,用于跟踪每次遍历是否发生了元素交换。

4. 输入循环

使用一个for循环来读取用户输入的10个整数:

  • scanf("%d", &arr[i]);:使用scanf函数读取一个整数,并将其存储在arr[i]中。

5. 冒泡排序逻辑

使用两层嵌套的for循环来实现冒泡排序,外层循环控制排序的总轮数,内层循环进行相邻元素的比较和交换:

  • 外层for循环变量i从0到8,表示需要进行9轮比较。
  • 内层for循环变量j从0到8,但在每轮比较中,只比较到第9-i个元素,因为后面的元素已经在前面的轮次中排好序了。
  • 如果arr[j]小于arr[j + 1],则交换这两个元素,并设置p为1,表示发生了交换。

6. 优化:提前结束排序

如果在某一轮遍历中没有发生任何交换(即p保持为0),则说明数组已经排好序,可以提前结束排序。

7. 输出排序结果

使用一个for循环遍历排序后的数组,并使用printf函数输出每个元素。

8. 程序结束

main函数返回0,表示程序正常结束。

源代码

复制代码
#include <stdio.h>
int main(void)
{
	int arr[10];
	int temp;
	int p = 0;//用于遍历一次是否发生交换
	for (int i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (int i = 0; i < 9; i++)
	{
		p = 0;
		for (int j = 0; j < 9; j++)
		{
			if (arr[j] < arr[j + 1])
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
				p = 1;
			}
		}
		if (p == 0)
			break;
	}
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}
相关推荐
Java后端的Ai之路17 分钟前
03、Python - 抽象工厂模式
开发语言·python·设计模式·抽象工厂模式·通用智慧
吴声子夜歌18 分钟前
Java——开发中通用的方法和准则(一)
java·开发语言
常驻客栈37 分钟前
B-深入理解计算机系统第3版之第11章:网络编程
开发语言·笔记·学习笔记·常驻客栈·深入理解计算机系统
旧梦952741 分钟前
Java 单例模式:从基础到实战的完整指南
java·开发语言·单例模式
小小晓.1 小时前
C++ 值类别与完美转发深度剖析:从左值右值到 std::forward 源码解密
开发语言·c++·算法
格林威2 小时前
C# 相机Burst模式图像采集:使用相机内存配合OpenCvSharp和Halcon实现短时间的高速采集的方法
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
chen<>2 小时前
C++ 六种 memory_order:从原子性到线程间可见性.md
java·linux·开发语言·c++
一直C2 小时前
Linux系统编程|进程间通信IPC全套详解(1)(管道、信号)
linux·c语言·开发语言·网络·青少年编程·visual studio code
春风解人意2 小时前
从零开始学习嵌入式P28----线程
c语言·学习·算法
m0_734571762 小时前
深入理解C++ 类型转换<三>const_cast
开发语言·c++