本题要求采用选择法排序,将给定的n个整数从大到小排序后输出。

 

 

#include <stdio.h>

#define MAXN 10

 

int main()

{

    int i, index, k, n, temp;

    int a[MAXN];

 

    scanf("%d", &n);

    for (i = 0; i < n; i++)

    {

        scanf("%d", &a[i]);

    }

 

    // 外层循环控制排序轮数,一共需要n-1轮

    for (k = 0; k < n - 1; k++)

    {

        // 先假设当前未排序部分的第一个元素(即a[k])为最大元素的下标

        index = k;

        // 内层循环用于在未排序部分寻找最大元素的下标

        for (i = k + 1; i < n; i++)

        {

            if (a[i] > a[index])

            {

                index = i;

            }

        }

        // 交换找到的最大元素和当前轮次开始位置的元素

        temp = a[index];

        a[index] = a[k];

        a[k] = temp;

    }

 

    for (i = 0; i < n; i++)

    {

        printf("%d ", a[i]);

    }

    return 0;

}

 

 

以下是代码分析:

 

整体思路

 

选择排序的基本思想是每一轮从待排序的数据元素中选出最大(或最小)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最大(或最小)元素,然后放到已排序序列的末尾,以此类推,直到全部待排序的数据元素排完。

 

代码各部分说明

 

1. 变量定义部分:

- 定义了 i 、 index 、 k 、 n 、 temp 等整型变量, i 通常用于循环计数, index 用于记录每一轮找到的最大元素的下标, k 用于控制外层循环(表示排序的轮次), n 用于存储输入整数的个数, temp 用于交换元素时的临时存储。

- 定义了数组 a ,用于存放输入的整数,其最大长度由 MAXN 定义为10。

2. 输入部分:

- 通过 scanf 函数先获取输入整数的个数 n ,然后使用 for 循环逐个读入 n 个整数并存入数组 a 中。

3. 排序部分(核心逻辑):

- 外层 for 循环:

- 循环条件是 k < n - 1 ,因为一共进行 n - 1 轮排序就能将 n 个元素排好序(最后一个元素会自然处于正确位置)。每一轮循环开始时,先默认当前未排序部分的第一个元素(也就是 a[k] 所在位置的元素)是最大元素,所以将 index 初始化为 k 。

- 内层 for 循环:

- 从 k + 1 位置开始(因为已经默认 a[k] 是最大元素候选了,所以从它后面的元素开始找更大的)到 n 遍历未排序的部分,用 if 语句比较 a[i] 和当前记录的最大元素 a[index] ,如果 a[i] 更大,就更新 index 为 i ,这样内层循环结束后, index 就指向了这一轮未排序部分中的最大元素下标。

- 交换元素:

- 找到每一轮的最大元素下标 index 后,使用 temp 作为临时变量,将 a[index] (最大元素)和 a[k] (当前轮次开始位置的元素)进行交换,使得每一轮都把未排序部分的最大元素放到已排序部分的末尾(从大到小排序)。

4. 输出部分:

- 最后使用 for 循环遍历整个排好序的数组 a ,通过 printf 函数将每个元素输出,元素之间用空格隔开。

 

这样,整个程序就能实现对输入的 n 个整数进行从大到小的选择排序并输出排序后的结果了,当然要注意输入时要按照程序要求正确输入整数的个数以及相应个数的整数哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js的生命周期

Vue.js 是一个构建用户界面的渐进式框架&#xff0c;它提供了一个响应式和组件化的方式来构建前端应用。了解 Vue 的生命周期对于开发者来说至关重要&#xff0c;因为它可以帮助我们更好地控制组件的状态和行为。本文将详细介绍 Vue 的生命周期&#xff0c;并提供相应的代码示例…

Java-22 深入浅出 MyBatis - 手写ORM框架3 手写SqlSession、Executor 工作原理

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

Android 逆向/反编译/Hook修改应用行为 基础实现

前言&#xff1a;本文通过一个简单的情景案例实现安卓逆向的基本操作 一、情景描述 本文通过一个简单的情景案例来实现安卓逆向的基本操作。在这个案例中所使用的项目程序是我自己的Demo程序&#xff0c;不会造成任何的财产侵害&#xff0c;本文仅作为日常记录及案例分享。实…

IDEA创建Spring Boot项目配置阿里云Spring Initializr Server URL【详细教程-轻松学会】

1.首先打开idea选择新建项目 2.选择Spring Boot框架(就是选择Spring Initializr这个) 3.点击中间界面Server URL后面的三个点更换为阿里云的Server URL Idea中默认的Server URL地址&#xff1a;https://start.spring.io/ 修改为阿里云Server URL地址&#xff1a;https://star…

基于MATLAB的信号处理工具:信号分析器

信号&#xff08;或时间序列&#xff09;是与特定时间相关的一系列数字或测量值&#xff0c;不同的行业和学科将这一与时间相关的数字序列称为信号或时间序列。生物医学或电气工程师会将其称为信号&#xff0c;而统计学家或金融定量分析师会使用时间序列这一术语。例如&#xf…

Plugin - 插件开发03_Spring Boot动态插件化与热加载

文章目录 Pre方案概览使用插件的好处流程CodePlugin 定义Plugin 实现Plugin 使用方动态加载插件类加载器注册与卸载插件配置文件启动类测试验证 小结 Pre 插件 - 通过SPI方式实现插件管理 插件 - 一份配置&#xff0c;离插件机制只有一步之遥 插件 - 插件机制触手可及 Plug…

ECharts柱状图-阶梯瀑布图,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个柱状图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供…

【Hash Function and HashMap】

散列函数&#xff08;Hash Function&#xff09;是一种将任意大小的数据映射到固定大小值的函数。在 HashMap 中&#xff0c;它扮演着核心角色。让我详细解释&#xff1a; 散列函数基本原理 输入&#xff1a;任意类型的键&#xff08;key&#xff09;输出&#xff1a;固定大小…

【jvm】为什么要有GC

目录 1. 自动内存管理2. 提升程序稳定性3. 优化性能4. 跨平台能力5. 分代回收策略 1. 自动内存管理 1.JVM中的GC机制负责自动管理内存&#xff0c;这意味着开发人员不需要手动分配和释放内存。2.这一特性大大简化了Java程序的内存管理&#xff0c;降低了内存泄漏和内存溢出等问…

Python泛型编程:TypeVar和Generic详解 - 写给初学者的指南

Python泛型编程&#xff1a;TypeVar和Generic详解 - 写给初学者的指南 前言1. 为什么需要泛型&#xff1f;2. TypeVar&#xff1a;定义泛型类型变量3. Generic&#xff1a;创建泛型类4. 多个泛型类型变量5. 使用场景小结结语 前言 大家好&#xff01;今天我们来聊一聊Python中…

COUNT(*)、COUNT(1)、COUNT(某一列)的区别是什么?哪个性能更好

一些特殊情况&#xff1a; 有索引时&#xff1a;如果查询使用了索引&#xff0c;且查询的列在索引中&#xff0c;COUNT(某一列) 可能在某些情况下会比较快&#xff0c;因为数据库只需要扫描索引&#xff0c;而不需要扫描整个表。有 NULL 值时&#xff1a;COUNT(某一列) 可能会…

C/C++流星雨

系列文章 序号直达链接1C/C爱心代码2C/C跳动的爱心3C/C李峋同款跳动的爱心代码4C/C满屏飘字表白代码5C/C大雪纷飞代码6C/C烟花代码7C/C黑客帝国同款字母雨8C/C樱花树代码9C/C奥特曼代码10C/C精美圣诞树11C/C俄罗斯方块12C/C贪吃蛇13C/C孤单又灿烂的神-鬼怪14C/C闪烁的爱心15C/C…

【机器学习】——K均值聚类:揭开数据背后的隐藏结构

目录 引言&#xff1a;什么是聚类分析&#xff1f;K均值聚类的基本原理 2.1 聚类的概念2.2 K均值聚类简介 K均值算法的工作原理 3.1 初始化与选定K值3.2 计算距离与分配簇3.3 更新质心3.4 迭代与收敛 K均值聚类的优缺点 4.1 优点4.2 缺点与局限性 K均值聚类的常见应用 5.1 市场…

【WRF-Urban】SLUCM新增空间分布城市冠层参数及人为热排放AHF代码详解(下)

目录 详细解释更改文件内容4 运行模块(run):README.namelist5 输出模块(share):share/module_check_a_mundo.Fshare/output_wrf.F参考SLUCM新增空间分布城市冠层参数及人为热排放AHF代码详解的前两部分内容可参见-【WRF-Urban】SLUCM新增空间分布城市冠层参数及人为热排放A…

go 集成nacos注册中心、配置中心

使用限制 Go>v1.15 Nacos>2.x 安装 使用go get安装SDK&#xff1a; go get -u github.com/nacos-group/nacos-sdk-go/v2 快速使用 初始化客户端配置ClientConfig constant.ClientConfig{TimeoutMs uint64 // 请求Nacos服务端的超时时间&#xff0c;默…

ModelScope-Agent(1): 基于开源大语言模型的可定制Agent系统

目录 简介快速入门 简介 github地址 快速入门 看前两篇&#xff0c;调用千问API和天气API # 选用RolePlay 配置agent from modelscope_agent.agents.role_play import RolePlay # NOQArole_template 你扮演一个天气预报助手&#xff0c;你需要查询相应地区的天气&#x…

终端中运行 conda install 命令后一直显示“Solving environment: \ ”

初步接触深度学习&#xff0c;在配置环境方面出了点问题&#xff0c;运行 conda install 命令时&#xff0c;卡在 "Solving environment: \ "。 网上搜索发现&#xff0c; 一般可能的原因就是以下几种 环境解析耗时&#xff1a; Conda 在安装包时需要解析当前环境&…

Jenkins相关的Api接口调用详解

Jenkins API是Jenkins持续集成和持续部署(CI/CD)平台提供的一组接口,允许外部程序通过HTTP请求与Jenkins进行交互。以下是对Jenkins API使用的简介: 一、Jenkins API的主要功能 作业管理:通过API,可以创建、配置、删除以及查询作业(Job)。构建触发:可以远程触发新的构…

【模型对比】ChatGPT vs Kimi vs 文心一言那个更好用?数据详细解析,找出最适合你的AI辅助工具!

在这个人工智能迅猛发展的时代&#xff0c;AI聊天助手已经深入我们的工作与生活。你是否曾在选择使用ChatGPT、Kimi或是百度的文心一言时感到一头雾水&#xff1f;每款AI都有其独特的魅力与优势&#xff0c;那么&#xff0c;究竟哪一款AI聊天助手最适合你呢&#xff1f;本文将带…

react 和 react-dom 是什么关系

React和React DOM是两个与React生态系统密切相关的npm包&#xff0c;它们在构建用户界面时扮演不同的角色&#xff0c;但相互之间存在紧密的依赖关系。以下是React和React DOM关系的详细解释&#xff1a; React的作用 React是一个用于构建用户界面的JavaScript库。它提供了构建…