ACM教程 - 选择排序

简介: ACM教程 - 选择排序

定义

选择排序是一种简单直观的排序算法,其基本原理是每一次从待排序的数组里找到最小值(最大值)的下标,然后将最小值(最大值)跟待排序数组的第一个进行交换,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。反复的进行这样的过程直到待排序的数组全部有序。

  • 稳定性:根据 相等元素 在数组中的 相对顺序 是否被改变,排序算法可分为「稳定排序」和「非稳定排序」两类。
  • 就地性:根据排序过程中 是否使用额外内存(辅助数组),排序算法可分为「原地排序」和「异地排序」两类。一般地,由于不使用外部内存,原地排序相比非原地排序的执行效率更高。
  • 自适应性:根据算法 时间复杂度 是否 受待排序数组的元素分布影响 ,排序算法可分为「自适应排序」和「非自适应排序」两类。「自适应排序」的时间复杂度受元素分布影响,反之不受其影响。
  • 比较类:比较类排序基于元素之间的 比较算子(小于、相等、大于)来决定元素的相对顺序;相对的,非比较排序则不基于比较算子实现。

图解

4e8d0925bba1412b928c521e57eca094.gif

性质

  • 时间复杂度
  • 最佳 O()
  • 平均 O()
  • 最差 O()
  • 空间复杂度
  • 最差 O(1)
  • 稳定性:非稳定
  • 为什么说选择排序是不稳定的呢?
  • 举个例子,序列arr = [5 8 5 2 9],我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。
  • 就地性:原地
  • 自适应性:非自适应
  • 比较类:比较

Java

publicclassselectSort {
publicstaticvoidmain(String[] args) {
int[] num={29,10,14,37,14,2,8,1,7,6,5};
for (inti=0; i<num.length; i++) {
// 注意 minIndex 的取值intminIndex=i;
// j=i; 意味着i之前的数都是有序的for (intj=i; j<num.length; j++) {
if (num[j]<num[minIndex]){
minIndex=j;
                }
            }
// 交换,每一次循环的i都是未排序数据的第一个inttemp=num[i];
num[i] =num[minIndex];
num[minIndex] =temp;
        }
System.out.println(Arrays.toString(num));
// [1, 2, 5, 6, 7, 8, 10, 14, 14, 29, 37]    }
}
目录
相关文章
|
Java 应用服务中间件 Maven
解决A child container failed during start报错问题
解决A child container failed during start报错问题
389 0
|
11月前
|
存储 资源调度 Java
计算机基础(1)——计算机体系结构和组成
计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。 在过去的几十年里,计算机科学经历了令人瞩目的飞速发展。经历了电子管、晶体管、集成电路的世代发展,体积越来越小、性能越来越强,为人类带来了巨大的便利和变革,下面我们来回顾计算机的发展历程。
3249 5
计算机基础(1)——计算机体系结构和组成
|
5月前
|
人工智能 运维 安全
MCP协议深度解析:客户端-服务器架构的技术创新
作为一名长期关注AI技术发展的博主摘星,我深刻感受到了MCP(Model Context Protocol)协议在AI生态系统中的革命性意义。MCP协议作为Anthropic公司推出的开放标准,正在重新定义AI应用与外部系统的交互方式,其基于JSON-RPC 2.0的通信机制为构建可扩展、安全的AI应用提供了坚实的技术基础。在深入研究MCP协议规范的过程中,我发现这一协议不仅解决了传统AI应用在资源访问、工具调用和上下文管理方面的痛点,更通过其独特的三大核心概念——资源(Resources)、工具(Tools)、提示词(Prompts)——构建了一个完整的AI应用生态系统。MCP协议的客户端-
451 0
MCP协议深度解析:客户端-服务器架构的技术创新
|
IDE 开发工具 iOS开发
Pandas如何在PyCharm中进行安装?
【7月更文挑战第4天】Pandas如何在PyCharm中进行安装?
4252 61
|
Kubernetes 架构师 Java
史上最全对照表:大厂P6/P7/P8 职业技能 薪资水平 成长路线
40岁老架构师尼恩,专注于帮助读者提升技术能力和职业发展。其读者群中,多位成员成功获得知名互联网企业的面试机会。尼恩不仅提供系统化的面试准备指导,还特别针对谈薪酬环节给予专业建议,助力求职者在与HR谈判时更加自信。此外,尼恩还分享了阿里巴巴的职级体系,作为行业内广泛认可的标准,帮助读者更好地理解各职级的要求和发展路径。通过尼恩的技术圣经系列PDF,如《尼恩Java面试宝典》等,读者可以进一步提升自身技术实力,应对职场挑战。关注“技术自由圈”公众号,获取更多资源。
|
监控 Cloud Native 持续交付
云原生架构:企业数字化转型的新引擎##
在当今数字化浪潮中,云原生架构正成为推动企业创新和竞争力的关键因素。本文探讨了云原生的核心概念、技术优势以及在现代业务场景中的应用实践,揭示了其如何助力企业实现高效运营、灵活扩展与持续集成。通过对云原生技术的深入剖析,我们将看到它不仅是一种技术趋势,更是企业数字化转型的战略选择。 ##
172 5
|
C语言
【初阶C语言】随意拿捏循环语句
【初阶C语言】随意拿捏循环语句 上节课我们学完了分支语句(if和switch语句),这节课请继续跟着本娥学习循环语句
252 0
|
消息中间件 负载均衡 Java
Spring Boot 整合 RabbitMQ:简化异步消息处理
前言 RabbitMQ 是一款高性能的开源消息队列服务器,基于 AMQP 协议。它广泛应用于企业级应用程序,用于解耦系统组件、实现异步处理、负载均衡等。本文将指导您如何在 Spring Boot 项目中整合 RabbitMQ,实现简单高效的消息处理。
1391 0
|
Java Maven
Maven - 发布JAR包到Maven远程中央仓库(二)
Maven - 发布JAR包到Maven远程中央仓库(二)
408 0
【鸿蒙】 使用定时器做一个简单的抢红包小游戏
# 【鸿蒙】 使用定时器做一个简单的抢红包小游戏 ## 1.新建项目 ![image-20220609213224034](https://yygh-sz.oss-cn-beijing.aliyuncs.com/image-20220609213224034.png) ![](https://yygh-sz.oss-cn-beijing.aliyuncs.com/image-20220609213246130.png) ![image-20220609213327195](https://yygh-sz.oss-cn-beijing.aliyuncs.com/image-20220
381 0