java - 选择排序

news2024/12/26 21:22:33

一、什么是选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的基本思想是每次从待排序的元素中选择最小(或最大)的元素,将其放到已排序序列的末尾,直到所有元素排序完成。

具体步骤如下:

  1. 首先,在待排序序列中找到最小(或最大)的元素,将其与序列的第一个元素进行交换。
  2. 接着,在剩下的未排序序列中继续执行上述操作,即找到最小(或最大)的元素,将其与序列的第二个元素进行交换。
  3. 重复上述步骤,直到所有元素排序完成。

选择排序的时间复杂度为O(n^2),其中n为待排序序列的长度。虽然选择排序相比其他高级排序算法效率较低,但其实现简单,且空间复杂度为O(1),对于小规模的序列仍然具有一定的实用性。

二、算法代码

public class SelectionSort {
    public static void selectSort(int[] nums){
        int size = nums.length;
        for(int i = 0; i < size-1 ; i++){
                int k = i;//记录未排序区间中最小元素的位置
            for(int j = i+1 ; j < size ; j++){
                if(nums[j] < nums[k]){
                    k = j;
                }
            }
            //交换位置
            int temp = nums[i];
            nums[i] = nums[k];
            nums[k] = temp;
        }
    }
    public static void main(String[] args) {
        int[] nums = new int[]{4,2,1,3};
        System.out.print("原数组: ");
        for (int k :nums) {
            System.out.print(k +" ");
        }
        System.out.print("\n排序后: ");
        selectSort(nums);
        for (int k:nums) {
            System.out.print(k +" ");
        }
    }
}

结果: 

 

三、算法特性 

时间复杂度: O(n^2),外循环共n-1轮,第一轮未排序区间长度为n,最后一轮的未排序区间长度为2,即各轮未排序区间分别为:n,n-1,n-2,...,3,2,求和为(n-1)(n+2)/2 。

空间复杂度:O(1),指针 i 和 j  使用常数大小的额外空间。

非稳定排序:如图,排序后,两个5的相对位置发生了改变,因此是非稳定排序。

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

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

相关文章

LemMinX-Maven:帮助在eclipse中更方便地编辑maven的pom文件

LemMinX-Maven&#xff1a;https://github.com/eclipse/lemminx-maven LemMinX-Maven可以帮助我们在eclipse中更方便地编辑maven工程的pom.xml文件&#xff0c;例如补全、提示等。不用单独安装&#xff0c;因为在安装maven eclipse插件的时候已经自动安装了&#xff1a; 例…

第97步 深度学习图像目标检测:RetinaNet建模

基于WIN10的64位系统演示 一、写在前面 本期开始&#xff0c;我们继续学习深度学习图像目标检测系列&#xff0c;RetinaNet模型。 二、RetinaNet简介 RetinaNet 是由 Facebook AI Research (FAIR) 的研究人员在 2017 年提出的一种目标检测模型。它是一种单阶段&#xff08;o…

【Linux基础】Linux常见指令总结及周边小知识

前言 Linux系统编程的学习我们将要开始了&#xff0c;学习它我们不得不谈谈它的版本发布是怎样的&#xff0c;谈它的版本发布就不得不说说unix。下面是unix发展史是我在百度百科了解的 Unix发展史 UNIX系统是一个分时系统。最早的UNIX系统于1970年问世。此前&#xff0c;只有…

两年功能五年自动化测试面试经验分享

最近有机会做一些面试工作&#xff0c;主要负责面试软件测试人员招聘的技术面试。 之前一直是应聘者的角色&#xff0c;经历了不少次的面试之后&#xff0c;多少也积累一点面试的经验&#xff0c;现在发生了角色转变。初次的面试就碰到个工作年限比我长的&#xff0c;也没有时…

ubuntu22.04 arrch64版操作系统编译zlmediakit

脚本 系统没有cmake&#xff0c;需要通过apt先进行下载&#xff0c;下面的脚本已经包含了 # 安装依赖 gcc-c.x86_64 这个不加的话会有问题 sudo yum -y install gcc gcc-c libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg git openssl-devel gcc-c.x86_64 ca…

R语言如何实现多元线性回归

输入数据 先把数据用excel保存为csv格式放在”我的文档”文件夹 打开R软件,不用新建,直接写 回归计算 求三个平方和 置信区间(95%)

springboot 返回problem+json

spring所有配置都在WebMvcAutoConfiguration中 其中有 ProblemDetailsExceptionHandler 容器中的一个组件 -ControllerAdvice用来集中处理异常的 -点进ResponseEntityExceptionHandler 包含这些异常&#xff0c;如果出现以下异常&#xff0c;会被springboot支持以RFC 7807规…

2022年03月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 以下四个选项中,运行哪个积木块,可能得到523这个数值? A: B: C: D: 答案:B 四个选项都遵循统一的公式:随机数ⅹ10+3=523,因此可以得出随

Redis-主从与哨兵架构

Jedis使用 Jedis连接代码示例&#xff1a; 1、引入依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version> </dependency> 2、访问代码 public class JedisSingleTe…

Modown主题v8.12 安装教程和主题下载

亲测」Modown主题v8.12学习版 上传好主题选择该主题就好了设置 设置好的首页 内容页&#xff1a; WordPress主题Modown和WordPress插件Erphpdown想必正在使用WordPress程序建站的站长都非常熟悉&#xff0c;因为这两款应用在WordPress站长圈子里还是比较知名的&#xff0c;所以…

LangChain 9 模型Model I/O 聊天提示词ChatPromptTemplate, 少量样本提示词FewShotPrompt

LangChain系列文章 LangChain 实现给动物取名字&#xff0c;LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储&#xff0c;读取YouTube的视频文本搜索I…

百度 文心一言 sdk 试用

JMaven Central: com.baidu.aip:java-sdk (sonatype.com) Java sdk地址如上&#xff1a; 文心一言开发者 文心一言 (baidu.com) ERNIE Bot SDK https://yiyan.baidu.com/developer/doc#Fllzznonw ERNIE Bot SDK提供便捷易用的接口&#xff0c;可以调用文心一言的能力&#…

1553B板卡详解

个人博客地址: https://cxx001.gitee.io 简介 1553b板卡主要应用于航天航空工业领域&#xff0c;它的数据传输结构有点类似集中分布式服务器的设计&#xff0c;分为BC、RT、BM三类部件&#xff0c;BC有且仅有1个&#xff0c;类似我们的master管理服务节点&#xff0c;RT有0~32…

LangChain(0.0.339)官方文档二:LCEL

文章目录 一、LangChain Expression Language (LCEL)1.1 LCEL简介1.2 Runnable1.2.1 Runnable方法1.2.2 Runnable组合方式1.2.3 修改行为 1.3 输入输出模式1.3.1 前置知识&#xff1a;Pydantic1.3.2 Input Schema1.3.3 Output Schema 1.4 同步调用1.4.1 Invoke1.4.2 Stream1.4.…

超分辨率重建

意义 客观世界的场景含有丰富多彩的信息&#xff0c;但是由于受到硬件设备的成像条件和成像方式的限制&#xff0c;难以获得原始场景中的所有信息。而且&#xff0c;硬件设备分辨率的限制会不可避免地使图像丢失某些高频细节信息。在当今信息迅猛发展的时代&#xff0c;在卫星…

io.lettuce.core.RedisCommandExecutionException

io.lettuce.core.RedisCommandExecutionException: ERR invalid password ERR invalid password-CSDN博客 io.lettuce.core.RedisCommandExecutionException /** Copyright 2011-2022 the original author or authors.** Licensed under the Apache License, Version 2.0 (the…

医学图像分割:U_Net 论文阅读

“U-Net: Convolutional Networks for Biomedical Image Segmentation” 是一篇由Olaf Ronneberger, Philipp Fischer, 和 Thomas Brox发表的论文&#xff0c;于2015年在MICCAI的医学图像计算和计算机辅助干预会议上提出。这篇论文介绍了一种新型的卷积神经网络架构——U-Net&a…

二叉树--详解

目录 树的概念 关于树的概念 二叉树 概念 两种特殊的二叉树 满二叉树 完全二叉树 二叉树的性质 巩固性质的习题 简单的创建二叉树 二叉树的遍历 递归实现二叉树的前中后后序遍历 二叉树的基本操作 获取树中节点个数 获取叶子结点个数 子问题思路-获取叶子结点个…

CTFSHOW sqll注入

号过滤绕过 号和不加通配符的 like 是一样的。 还可以使用 < >号来绕过&#xff0c;<> 在mysql中等于! 如果在加一个! 双重否定代表肯定 就是了 空格过滤绕过 /**/ &#xff0c;()&#xff0c;&#xff0c;tab&#xff0c;两个空格 or and xor not 过滤绕过 a…

Jenkins 整合 Docker 自动化部署

Docker 安装 Jenkins 配置自动化部署 1. Docker 安装 Jenkins 1.1 拉取镜像文件 docker pull jenkins/jenkins1.2 创建挂载文件目录 mkdir -p $HOME/jenkins_home1.3 启动容器 docker run -d -p 8080:8080 -v $HOME/jenkins_home:/var/jenkins_home --name jenkins jenkin…