当前位置: 首页 > news >正文

本题要求采用选择法排序,将给定的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.lryc.cn/news/501273.html

相关文章:

  • Linux: glibc: 频繁调用new/delete会不会导致内存的碎片
  • 量子变分算法---损失函数
  • 计算机的性能评估
  • 大数据之国产数据库_OceanBase数据库002_在centos7.9上_安装部署OceanBase001_踩坑指南_亲测可用
  • 【ETCD】【源码阅读】深入解析 EtcdServer.run 函数
  • springboot/ssm校内订餐系统Java代码web项目美食外卖点餐配送源码
  • floodfill算法
  • 【JAVA】六亮增加贴
  • git提交时出现merge branch main of xxx
  • lstm 输入数据的形状是怎么样的,他有两种输入方式,通过参数 batch_first来设置 默认是False
  • Apache Doris 数据类型
  • 编译问题 fatal error: rpc/rpc.h: No such file or directory
  • linux 安装composer
  • 数据库公共字段自动填充的三种实现方案
  • 《MySQL 入门:数据库世界的第一扇门》
  • Qt之第三方库QCustomPlot使用(二)
  • JAVA-类与继承
  • SSH连接报错,Corrupted MAC on input 解决方法
  • 【C++】8___继承
  • C# 中的异常处理:构建健壮和可靠的程序
  • 基于智能合约的医院凭证共享中心路径探析
  • vba学习系列(9)--按需求计数单元格数量
  • scale index的计算
  • 鸿蒙实现Web组件开发
  • Linux——linux系统移植
  • 工业摄像头应对复杂环境的策略与解决方案
  • 重生之我在异世界学编程之C语言:深入动态内存管理篇
  • 【经典论文阅读】Latent Diffusion Models(LDM)
  • 智能指针中的weak_ptr(弱引用智能指针)
  • 【电子通识】机电继电器和固态继电器的区别