Java算法:选择排序

news2024/11/16 21:56:54

一、选择排序

      选择排序(Selection sort)是一种简单直观的 排序算法 。

     工作原理:第一次从待排序的 数据元素 中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择 排序 是不稳定的排序方法。

 

二、选择排序步骤

1、首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
2、再从剩余未排序元素中继续寻找最小(大)元素,然后放到未排序序列的起始位置。
3、重复第二步,直到所有元素均排序完毕。

三、java实现选择排序 

   public static void main(String[] args) {

        //数组数据
        Integer[] arr = getData();
        System.out.println(Arrays.toString(arr));

        //选择排序
        selectSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    /**
     * 数组进行排序
     *
     * @param arr
     * @return
     */
    private static Integer[] selectSort(Integer[] arr) {
        //循环
        for (int i = 0; i < arr.length; i++) {
            //默认第一个最小值
            int min = arr[i];
            //默认第一个最小值索引
            int min_index = i;
            //循环比较
            for (int j = i + 1; j < arr.length; j++) {
                //比较找出最小值
                if (arr[j] < min) {
                    min = arr[j]; //最小值
                    min_index = j; //对应索引
                }
            }
 
            //判断最小索引不等于i索引,就交换值;
            if (min_index != i) {
                arr[min_index] = arr[i]; //将查找到最小值与第i个值交换位置
                arr[i] = min; //将最小值赋给对应的位置
            }

        }
        return arr;

    }

    /**
     * (1) 生成1-100范围的随机数20个
     */
    private static Integer[] getData() {
        Set<Integer> sets = new HashSet<>();
        Random random = new Random();
        while (true) {
            //生成1-100的随机数
            int ran = random.nextInt(100) + 1;
            //添加
            sets.add(ran);
            //判断生成20个数据
            if (sets.size() >= 20) {
                break;
            }
        }
        // 将Set转换成数组
        Integer[] arr = sets.toArray(new Integer[sets.size()]);
        return arr;
    }

效果:

四、性能分析

时间复杂度:
最好最差情况,选择排序的数据之间的比较次数都是固定的,
而最好情况:数组有序时,需要交换0次,最坏情况:数组无序时,交换n-1次
总体的排序时间是比较+交换的总和,所以时间复杂度为O(N^2) 

 选择排序理解和实现起来都比较简单,但效率比较低,一般很少使用选择排序

👉空间复杂度 :
  没有额外空间的开销,只有常数个记录的辅助空间,空间复杂度为O(1) 

 

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

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

相关文章

Android Snackbar

1.Snackbar Snackbar是Material Design中的一个控件&#xff0c;用来代替Toast。Snackbar是一个类似Toast的快速弹出消息提示的控件。Snackbar在显示上比Toast丰富&#xff0c;而且提供了用户交互的接口。 ①默认情况下&#xff0c;Snackbar显示在屏幕底部&#xff0c;它出现…

蓝鹏测控测宽仪系列又添一员大将——双目测宽仪

轧钢过程中钢板的宽度是一个重要的参数&#xff0c;它直接决定了成材率。同时&#xff0c;随着高新科技越来越广泛的应用到工程实际中&#xff0c;许多控制系统需要钢板实时宽度值作为模型参数。 当前&#xff0c;相当一部分宽厚板厂还在采用人工检测的方法&#xff0c;检测环境…

一文5个步骤用Jmeter做接口测试!

说实话&#xff0c;在游戏测试领域&#xff0c;做接口测试的并不多&#xff0c;做的好的更是寥寥无几&#xff08;请大家不要喷游戏测试比较low&#xff0c;行业现状如此而已&#xff09;。绝大部分游戏测试人员都是以功能测试为主&#xff0c;偶尔做做性能测试和压力测试已经很…

STM32F103C8T6第二天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出

1. 课程概述&#xff08;297.1&#xff09; 课程要求&#xff1a;C语言熟练&#xff0c;提前学完 C51 2. 开发软件Keil5的安装&#xff08;298.2&#xff09; 开发环境的安装 编程语言&#xff1a;C语言需要安装的软件有两个&#xff1a;Keil5 和 STM32CubeMX Keil5 的安装…

Fiddler实现 HTTP 网络抓包

文章目录 前言Fiddler 是什么下载 Fiddler1. 官网下载 Fiddler Classic2. 安装 Fiddler Classic3. 打开 Fiddler Classic 前言 前面我们简单地学习了关于应用层——自定义协议的知识&#xff0c;但是这都只是自定义协议&#xff0c;在实际生活中自定义协议用的还是占少数的&am…

终于有人把VMware虚拟机三种网络模式讲清楚了!

你们好&#xff0c;我的网工朋友。 前段时间VMware更新了&#xff0c;你用上最新版了吗&#xff1f; 有几个网工朋友留言说&#xff0c;在操作中遇到过各种各样的问题。比如说由于公司服务器重启导致出现下面的问题&#xff1a; 在Xshell里连接虚拟机映射时连接失败&#xf…

【Java|golang】2103. 环和杆---位运算

总计有 n 个环&#xff0c;环的颜色可以是红、绿、蓝中的一种。这些环分别穿在 10 根编号为 0 到 9 的杆上。 给你一个长度为 2n 的字符串 rings &#xff0c;表示这 n 个环在杆上的分布。rings 中每两个字符形成一个 颜色位置对 &#xff0c;用于描述每个环&#xff1a; 第 …

k8s之亲和性、污点

目录 亲和性 键值运算关系 硬策略 软策略 Pod亲和性与反亲和性 污点(Taint) 和 容忍(Tolerations) 污点(Taint) 容忍(Tolerations) 维护操作 故障排除步骤 亲和性 官方介绍&#xff1a;https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-nod…

nn.LayerNorm解释

这个是层归一化。我们输入一个参数&#xff0c;这个参数就必须与最后一个维度对应。但是我们也可以输入多个维度&#xff0c;但是必须从后向前对应。 import torch import torch.nn as nna torch.rand((100,5)) c nn.LayerNorm([5]) print(c(a).shape)a torch.rand((100,5,…

JMeter 接口自动化测试的最佳实践 (建议收藏)

JMeter 是一个开源的负载测试工具&#xff0c;它可以模拟多种协议和应用程序的负载&#xff0c;包括 HTTP、FTP、SMTP、JMS、SOAP 和 JDBC 等。在进行接口自动化测试时&#xff0c;使用 JMeter 可以帮助我们快速地构建测试用例&#xff0c;模拟多种场景&#xff0c;发现接口的性…

神舟十六乘组凯旋:故障预测与健康管理PHM在航空航天领域的关键作用

10月31日&#xff0c;神舟十六号载人飞船在经历五个月的太空飞行后顺利返回&#xff0c;安全着陆在内蒙古的东风着陆场&#xff0c;三位航天员安全顺利出舱。这意味着神舟十六号载人飞行任务取得圆满成功&#xff0c;标志着我国载人航天事业再创辉煌。在这背后&#xff0c;离不…

windows和docker环境下springboot整合gdal3.x

链接: gdal官网地址 gdal gdal的一个用c语言编写的库&#xff0c;用于处理地理信息相关的数据包括转换&#xff0c;识别数据&#xff0c;格式化数据以及解析 同时提供第三方语言的SDK包括python&#xff0c;java上述需要编译后使用 java是需要使用jni接口调用实现方法在wind…

力扣 搜索二维矩阵 二分

&#x1f468;‍&#x1f3eb; 搜索二维矩阵 ✨ AC code class Solution {public boolean searchMatrix(int[][] matrix, int target){int l 0;int row matrix.length;int col matrix[0].length;int r row * col - 1;while (l < r){int m l r >> 1;int x m / …

YOLOv7改进:加入解耦头Decoupled_Detect,涨点明显

💡💡💡本文全网首发独家改进:Decoupled_Detect,Hybrid Channels 策略重新设计了一个更高效的解耦头结构 Decoupled_Detect | 亲测在多个数据集能够实现涨点,多尺度特性在小目标检测表现也十分出色。 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c…

响应式设计疑难问题全解析!一篇读懂,立即上手

在我们当前的技术环境中&#xff0c;响应式设计已经成为前端开发的重要部分。其目标是让网站能够以最优的方式在任何设备上工作——不论是大屏电脑、笔记本、平板还是智能手机。这就要求网页能够自适应不同设备的屏幕大小。下面就让我们深入浅出地探讨响应式设计的精髓&#xf…

【python海洋专题三十五】海图数据加密--二维插值

【python海洋专题三十五】海图数据加密–二维插值 【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件 【python海洋专题二】读取水深nc文件并水深地形图 【python海洋专题三】图像修饰之画布和坐标轴 【Python海洋专题四】之水深地图图像修饰 【Python…

20231102从头开始配置cv180zb的编译环境(欢迎入坑,肯定还有很多问题等着你)

20231102从头开始配置cv180zb的编译环境&#xff08;欢迎入坑&#xff0c;肯定还有很多问题等着你&#xff09; 2023/11/2 11:31 &#xff08;欢迎入坑&#xff0c;本篇只是针对官方的文档整理的&#xff01;只装这些东西你肯定编译不过的&#xff0c;还有很多问题等着你呢&…

Linux 性能调优之资源限制(ulimitCgroup)

写在前面 考试整理相关笔记博文内容涉及 Linux 中资源限制的两种方式简单介绍 用户会话资源限制进程资源限制 理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其…

【报错解决】消息号:00058

背景&#xff1a;在配置OMX3碰到了如下报错。 分析&#xff1a;根据自己目前的理解&#xff0c;valuation level 决定了valuation area.在将工厂设为valuation之后&#xff0c;工厂自动就变为了valuation area.所以起码应该配置工厂。 Tcd:OX14 解决&#xff1a;使用OX18将工…

用逻辑分析仪观察串口Uart数据波形

一、概述 只讨论嵌入式编程中较为常用的异步串行接口&#xff08;Universal Asynchronous Receiver/Transmitter&#xff0c; UART&#xff09;&#xff0c;TTL电平。 串口的参数一般有&#xff1a; 1.波特率&#xff0c;数据传输速率&#xff0c;单位bps&#xff08;bits per…