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,一经查实,立即删除!

相关文章

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

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

【HICE】DNS反向解析

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

论文辅导 | 基于多尺度分解的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 "…

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…

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

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

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、定义用于存储转换结果的数…

一个pdf分割成多个pdf,一个pdf分成多个pdf

在数字化办公和学习中&#xff0c;pdf格式因其良好的兼容性和稳定性而受到广泛欢迎。但有时候&#xff0c;我们可能需要将一个大的pdf文件分割成多个小文件&#xff0c;以便于分享、打印或编辑。今天&#xff0c;我就来教大家几种简单有效的方法&#xff0c;让你轻松实现pdf文件…

基于Wireshark和TiWsPC(Wireshark Packet Converter)的Zigbee抓包

前言 介绍几种Zigbee抓包方式&#xff1a; 1. Ubiqua 使用教程网上非常多也非常清晰&#xff1b; 但是Ubiqua是收费软件&#xff0c;较贵&#xff1b; 我安装过了&#xff0c;费好多事&#xff0c;没安装成功。 2. Killerbee套件 https://github.com/riverloopsec/killerbe…

WACV2023论文速览域迁移Domain相关

Paper1 CellTranspose: Few-Shot Domain Adaptation for Cellular Instance Segmentation 摘要原文: Automated cellular instance segmentation is a process utilized for accelerating biological research for the past two decades, and recent advancements have produc…

Ad-hoc命令和模块简介

华子目录 Ad-hoc命令和模块简介1.概念2.格式3.Ansible命令常用参数4.模块类型4.1 三种模块类型4.2Ansible核心模块和附加模块 示例1示例2 Ad-hoc命令和模块简介 1.概念 Ansible提供两种方式去完成任务&#xff0c;一是ad-hoc命令&#xff0c;一是写Ansible playbook(剧本)Ad-…

【电商纯干货分享】干货速看!电商数据集数据API接口数据分析大全!

数据分析——深入探索中小企业数字化转型&#xff0c;专注提供各行业数据分析干货、分析技巧、工具推荐以及各类超实用分析模板&#xff0c;为钻研于数据分析的朋友们加油充电。 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09…

02浅谈大模型文本生成的背后逻辑

02浅谈大语言模型文本生成的背后逻辑 两个概念&#xff1a; 通俗理解大模型文本生成逻辑 假设有一个prompt&#xff1a;How are you &#xff1f;&#xff0c;输入给大模型&#xff0c;那么大模型使怎么输出&#xff1f;

uni-app x 跨平台开发框架

目录 uni-app x 是什么 和Flutter对比 uts语言 uvue渲染引擎 组合式API的写法 选项式API写法 页面生命周期 API pages.json全局配置文件 总结 uni-app x 是什么 uni-app x&#xff0c;是下一代 uni-app&#xff0c;是一个跨平台应用开发引擎。 uni-app x 是一个庞…