hnust 1816: 算法10-9:简单选择排序

hnust 1816: 算法10-9:简单选择排序

题目描述
选择排序的基本思想是:每一趟比较过程中,在n-i+1(i=1,2,…,n-1)个记录中选取关键字最小的记录作为有序序列中的第i个记录。
在多种选择排序中,最常用且形式最为简单的是简单选择排序。
简单选择排序的算法可以描述如下:
在这里插入图片描述

在本题中,读入一串整数,将其使用以上描述的简单选择排序的方法从小到大排序,并输出。

输入
输入的第一行包含1个正整数n,表示共有n个整数需要参与排序。其中n不超过1000。
第二行包含n个用空格隔开的正整数,表示n个需要排序的整数。
输出
只有1行,包含n个整数,表示从小到大排序完毕的所有整数。
请在每个整数后输出一个空格,并请注意行尾输出换行。
样例输入 Copy
10
2 8 4 6 1 10 7 3 5 9
样例输出 Copy
1 2 3 4 5 6 7 8 9 10
提示
在本题中,需要按照题目描述中的算法完成简单选择排序的算法。
简单选择排序是一种思路非常简单,结构简洁的排序算法。它的特点是,无论记录的初始排列形式如何,所需进行的关键字间的比较次数始终相同,均为n(n-1)/2。因此,其时间复杂度也固定在O(n2)。

解题过程

这段代码实现了选择排序(Selection Sort)算法,选择排序是一种简单直观的排序算法,其工作原理是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序数据元素排完。以下是对代码的详细解析:

  1. 函数定义

    • selectSort(int a[], int len):这是选择排序的函数,接收一个整数数组 a 和数组的长度 len 作为参数。
  2. 外层循环

    • for(int i = 0; i < len - 1; i++):外层循环控制排序过程中已排序元素的索引,从0开始,直到倒数第二个元素。
  3. 选择最小元素

    • int p = i;:初始化一个变量 p 作为当前轮次中已找到的最小元素的索引。
  4. 内层循环

    • for(int j = i + 1; j < len; ++j):内层循环从 i + 1 开始,遍历当前未排序的部分,寻找最小元素。
  5. 更新最小元素索引

    • if(a[j] < a[p]) p = j;:如果在内层循环中找到一个比当前最小元素 a[p] 更小的元素 a[j],则更新 pj
  6. 交换元素

    • swap(a[i], a[p]);:内层循环结束后,将找到的最小元素 a[p] 与当前轮次的第一个元素 a[i] 交换位置。
  7. swap 函数

    • 代码中没有给出 swap 函数的实现,但它应该是一个交换两个数组元素的函数。
  8. 算法性能

    • 选择排序的时间复杂度是 O(n^2),其中 n 是数组的长度。这是因为算法需要进行两层循环,内层循环在最坏情况下会遍历所有剩余的元素。
  9. 稳定性

    • 选择排序是稳定的排序算法,因为它不会改变相同元素之间的顺序。
  10. 适用场景

    • 选择排序适用于数据量较小或者数据基本有序的情况,此时它的效率相对较高。

选择排序是一种基础的排序算法,由于其实现简单,它在实际编程中仍然有着广泛的应用。然而,对于大规模数据集,更高效的排序算法(如快速排序、归并排序等)可能是更好的选择。


AC代码

#include <bits/stdc++.h>
using namespace std;int a[1010];
void selectSort(int a[], int len){for(int i = 0;i < len - 1;i++){int p = i;for(int j = i + 1;j < len;++j) if(a[j] < a[p]) p=j;swap(a[i], a[p]);}
}
int main(){int n;cin >> n;for(int i = 0;i < n;i++) cin >> a[i]; selectSort(a, n);for(int i = 0;i < n;i ++) cout << a[i] << ' ';return 0;
}

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

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

相关文章

FFmpeg常用命令手册

官方文档&#xff1a;ffmpeg Documentation 常规选项 -i input_url 输入文件或者输入流的路径 Main 选项 -f fmt (input/output) 强制指定输入或输出文件的格式&#xff0c; 常见的格式名称包括flv&#xff0c;mp4、hls、mpegts、avi、mov -c[:stream_specifier] codec (i…

收银系统源码-收银台副屏广告

1. 功能描述 门店广告&#xff1a;双屏收银机&#xff0c;副屏广告&#xff0c;主屏和副屏同步&#xff0c;总部可统一控制广告位&#xff0c;也可以给门店开放权限&#xff0c;门店独立上传广告位&#xff1b; 2.适用场景 新店开业、门店周年庆、节假日门店活动宣传&#x…

【HICE】DNS反向解析

反向解析&#xff1a;IP ----> 主机名 1.更改主配置文件 2.:更改反向的信息 3.重启服务 4.测试解析是否成功

聊天服实现设计

聊天服拓扑关系 聊天服独立于游戏服&#xff0c;客户端直连聊天服客户端按 PlayerID 散列&#xff0c;连接聊天服有涉及扣道具才能发言的等&#xff08;必须依赖游戏服功能的&#xff09;&#xff0c;先走游戏服&#xff0c;其他均可以直接走聊天服 聊天频道 - 世界频道 客户…

论文辅导 | 基于多尺度分解的LSTM⁃ARIMA锂电池寿命预测

辅导文章 模型描述 锂电池剩余使用寿命&#xff08;Remaining useful life&#xff0c;RUL&#xff09;预测是锂电池研究的一个重要方向&#xff0c;通过对RUL的准确预测&#xff0c;可以更好地管理和维护电池&#xff0c;延长电池使用寿命。为了能够准确预测锂电池的RUL&…

待研究课题记录

最近了解到两个新的有趣的节点&#xff0c;但是对于实际效果不是很确定&#xff0c;所以这里记录下&#xff0c;后续慢慢研究&#xff1a; 扰动注意力引导 Perturbed Attention Guidance GitHub - KU-CVLAB/Perturbed-Attention-Guidance: Official implementation of "…

默认导出(default)和命名导出

1.默认导出 优点&#xff1a; 简洁的导入语法&#xff1a; 导入时不需要使用花括号&#xff0c;可以直接重命名。单一职责&#xff1a; 模块导出一个主要功能或对象时&#xff0c;默认导出更符合逻辑。 适用场景&#xff1a; 模块只有一个导出&#xff1a; 如一个组件、一个…

CTS单测某个模块和测试项

1 &#xff0c;测试单个模块命令 run cts -m <模块名> 比如&#xff1a;run cts -m CtsUsbTests模块名可以从测试报告中看&#xff0c;如下&#xff1a; 2&#xff0c; 测试单个测试项 run cts -m <模块名> -t <test_name> 比如&#xff1a;run cts -m ru…

Linux程序地址空间

1. 进程地址空间 简单来说&#xff0c;就是从高地址往低地址&#xff0c;内存分区分别是&#xff1a; 内核空间&#xff1a;命令行参数argv和环境变量env等栈区&#xff1a;大部分局部变量&#xff0c;栈区内存往低处增长堆区&#xff1a;用于动态内存管理&#xff0c;堆区内存…

C # @逐字字符串

逐字字符串 代码 namespace TestAppConsole {class program{static void Main(string[] args){int a 0;int b 9;string c "2ui923i9023";//Console.Write(sizeof(int));string d "\t8282jjksk";string e "\t8282jjksk";Console.WriteLine(…

Java——继承(Inheritance)

一、继承简要介绍 1、继承是什么 在Java中&#xff0c;继承是一种面向对象编程的重要特性&#xff0c;它允许一个类&#xff08;子类或派生类&#xff09;继承另一个类&#xff08;父类或基类&#xff09;的属性和方法。继承的目的是实现代码的重用和设计的层次化。 子类通常…

LT8711GX 国产芯片 Type-C/DP1.4转HDMI2.1 用于加密狗 对接站

描述 LT8711GX是一款高性能的Type-C/DP1.4到HDMI2.1转换器&#xff0c;设计用于将USBType-C源或DP1.4源连接到HDMI2.1收发器。 该LT8711GX集成了一个符合DP1.4标准的接收器和一个符合HDMI2.1标准的发射器。此外&#xff0c;还包括一个CC控制器&#xff0c;用于CC通信&#xff0…

知名的以图叙事开源平台和工具

以图叙事是一种通过图表和图形来讲述故事或传达信息的方式&#xff0c;使复杂的数据更易于理解和更有吸引力。以下是一些知名的开源平台和工具&#xff0c;可以帮助你创建以图叙事的精彩内容&#xff1a; 1. StoryMapJS 描述: 一个简单的工具&#xff0c;用于创建由位置驱动的…

使用kali Linux启动盘轻松破解Windows电脑密码

破解分析文章仅限用于学习和研究目的&#xff1b;不得将上述内容用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。谢谢&#xff01;&#xff01; 效果展示&#xff1a; 使用kali Linux可以轻松破解Windows用户及密码 准备阶段&#xff1a; &#xff08…

洪水灾害的数据分析与预测

洪水是暴雨、急剧融冰化雪、风暴潮等自然因素引起的江河湖泊水量迅速增加&#xff0c;或者水位迅猛上涨的一种自然现象&#xff0c;是自然灾害。洪水又称大水&#xff0c;是河流、海洋、湖泊等水体上涨超过一定水位&#xff0c;威胁有关地区的安全&#xff0c;甚至造成灾害的水…

探索C++新特性:深入理解Lambda表达式

C不断演进&#xff0c;引入了新的特性和改进&#xff0c;使得语言更强大、更具表达力。其中&#xff0c;C11引入的Lambda表达式是最具影响力的特性之一。这个特性将匿名函数的能力带入C&#xff0c;允许开发者编写更简洁和清晰的代码。在这篇博客中&#xff0c;我们将探索C中的…

ASP.NET Core 使用Log4net

1. Nuget安装log4net&#xff0c;图里的两个 2.项目根目录下添加log4net.config.添加下面的代码: <?xml version"1.0" encoding"utf-8"?> <configuration><!-- This section contains the log4net configuration settings --><log…

C语言之常用内存函数以及模拟实现

目录 前言 一、memcpy的使用和模拟实现 二、memmove的使用和模拟实现 三、memset的使用和模拟实现 四、memcmp的使用和模拟实现 总结 前言 本文主要讲述C语言中常用的内存函数&#xff1a;memcpy、memmove、memset、memcmp。内容不多&#xff0c;除了了解如何使用&#x…

细说MCU的ADC模块单通道连续采样的实现方法

目录 一、工程依赖的硬件及背景 二、设计目的 三、建立工程 1、配置GPIO 2、选择时钟源和Debug 3、配置ADC 4、配置系统时钟和ADC时钟 5、配置TIM3 6、配置串口 四、代码修改 1、重定义TIM3中断回调函数 2、启动ADC及重写其回调函数 3、定义用于存储转换结果的数…

WHAT - SWR(stale-while-revalidate)HTTP 缓存失效策略 - 请求方案

目录 介绍传统数据请求的 React 代码示例SWR 的 React 代码示例SWR 的优势和不同之处 可复用组件真实示例特性解读自动重新请求1. 聚焦时重新请求2. 定期重新请求3. 重新连接时重新请求 条件数据请求1. 按需请求2. 依赖请求 数据更改1. 乐观更新2. 在数据更改后更新缓存3. 基于…