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

[蓝桥杯]实现选择排序

实现选择排序

题目描述

实现选择排序算法。介绍如下:

选择排序的工作原理是每一次从需要排序的数据元素中选出最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排列完毕。

请编写代码,完成选择排序,对给定数据进行升序排列

输入描述

第一行,数字 N (2≤N≤100)N (2≤N≤100),表示待排序的元素个数。

第二行,待排序的元素。

输出描述

输出一行,为升序序列。

输入输出样例

示例

输入

6
7 1 4 8 5 2

输出

1 2 4 5 7 8

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

总通过次数: 7780  |  总提交次数: 8170  |  通过率: 95.2%

难度: 中等   标签: 排序

算法原理详解

  1. ​初始化​​:从数组第一个元素开始遍历
  2. ​查找最小值​​:在未排序部分(i+1 到 n-1)中查找最小元素
  3. ​交换位置​​:将找到的最小元素与当前位置 i 的元素交换
  4. ​迭代推进​​:重复上述过程直到整个数组有序

时间复杂度分析

  • ​比较次数​​:固定为 2n(n−1)​ 次
  • ​交换次数​​:最多 n−1 次
  • ​时间复杂度​​:O(n2)(最优/最坏/平均情况相同)

算法特性

  • ​不稳定排序​​:可能改变相等元素的原始顺序(如序列 5, 8, 5, 2
  • ​原地排序​​:仅需 O(1) 额外空间
  • ​适用场景​​:小规模数据或对内存限制严格的情况
    #include <iostream>
    using namespace std;void selectionSort(int arr[], int n) {for (int i = 0; i < n - 1; i++) {int minIndex = i;  // 记录最小元素位置for (int j = i + 1; j < n; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;  // 更新最小元素位置}}// 交换最小元素到正确位置swap(arr[i], arr[minIndex]);}
    }int main() {int n;cin >> n;int arr[n];for (int i = 0; i < n; i++) {cin >> arr[i];}selectionSort(arr, n);// 输出排序结果for (int i = 0; i < n - 1; i++) {cout << arr[i] << " ";}cout << arr[n - 1];  // 最后一个元素单独输出避免末尾空格return 0;
    }

    示例演示(输入:7 1 4 8 5 2

    步骤操作当前数组状态
    初始-[7, 1, 4, 8, 5, 2]
    1最小元素1与7交换[​​1​​, 7, 4, 8, 5, 2]
    2最小元素2与7交换[1, ​​2​​, 4, 8, 5, 7]
    34已是未排序最小[1, 2, ​​4​​, 8, 5, 7]
    4最小元素5与8交换[1, 2, 4, ​​5​​, 8, 7]
    5最小元素7与8交换[1, 2, 4, 5, ​​7​​, 8]

    输出结果:1 2 4 5 7 8

http://www.xdnf.cn/news/10730.html

相关文章:

  • redhat变更旧nas挂在参数不生效
  • 【Java】mybatis-plus乐观锁与Spring重试机制
  • 高效易用的 MAC 版 SVN 客户端:macSvn 使用体验
  • 本地部署 Jenkins 并实现外部访问(Windows 版本)
  • PyTorch——线性层及其他层介绍(6)
  • 【HarmonyOS 5】鸿蒙APP使用【团结引擎Unity】开发的案例教程
  • LEAP模型能源需求/供应预测、能源平衡表核算、空气污染物排放预测、碳排放建模预测、成本效益分析、电力系统优化
  • 【macbook】触控板手势
  • 数据解析:一文掌握Python库 lxml 的详细使用(处理XML和HTML的高性能库)
  • 基于 COM 的 XML 解析技术(MSXML) 的总结
  • CSS设置移动端页面底部安全距离
  • 【Hot 100】279. 完全平方数
  • PopupImageMenuItem 无响应
  • AXURE-动态面板
  • 最优包含--字符串dp
  • 解锁技术文档撰写秘籍:从混沌到清晰的蜕变之旅
  • 帝可得 - 策略管理
  • 利用Python 进行自动化操作: Pyautogui 库
  • SQL注入漏洞-上篇
  • 正点原子lwIP协议的学习笔记
  • xmake的简易学习
  • CppCon 2014 学习:Cross platform GUID association with types
  • 蛋白质设计软件LigandMPNN介绍
  • 宇树科技更名“股份有限公司”深度解析:机器人企业IPO前奏与资本化路径
  • R1-Searcher++新突破!强化学习如何赋能大模型动态知识获取?
  • 职坐标IT培训:嵌入式开发C语言/硬件/RTOS路径
  • 时代星光推出战狼W60智能运载无人机,主要性能超市场同类产品一倍!
  • NLP实战(5):基于LSTM的电影评论情感分析模型研究
  • BugKu Web渗透之源代码
  • C++ stl容器之string(字符串类)