排序系列 之 选择排序

news2024/9/22 15:39:02
  • !!!排序仅针对于数组哦
  • 本次排序是按照升序来的哦

介绍

  • 快速排序英文名为SelectSort
  • 从数组中找到最小的放到前边

基本思路

  • 1、默认待排序数组中第一个作为最小值
  • 2、找待排序数组(注意不是整个数组哦)中真正的最小值
  • 3、找到真正的最小值和待排序数组第一个数据进行交换,真正的最小值到达正确位置
  • 4、重复1、2、3

代码

<!----java----->
public static void main(String[] args) {

		int[] arr = {10,2,8,3,1};
		sort(arr);
		System.out.println(Arrays.toString(arr));
		
	}
	
	// 代码
	public static void sort(int[] arr) {
		for(int i=0;i<arr.length;i++) {
			// 定义第一个数为最小值,其实就是i这个位置。因为第一轮为0,第二轮为1,。。。。
			// 定义一个变量去接收最小值,默认为i
			int minIndex = i;
			for(int j=i+1;j<arr.length;j++) {
				// 开始遍历后边的数
				// 如果当前数比定义的最小的数还要小,交换
				if(arr[j]<arr[minIndex]) {
					minIndex = j;
				}
			}
			// 退出循环后,此时minIndex指向的就是最小值。然后我们跟带排序数组的第一个位置交换
			// 此时minIndex为最小数值的下标
			// 这里可以不判断,就是自己跟自身多交换一次,也可以判断不同的才交换
			if(i!=minIndex) {
				int temp = arr[i];
				arr[i] = arr[minIndex];
				arr[minIndex] = temp;
			}

		}
	}

<!------------------------>
运行结果;
[1, 2, 3, 8, 10]
<!----python----->
def selectSort(arr):
    for i in range(len(arr)):
        min = i;
        for j in range(i+1,len(arr)):
            if(arr[j]<arr[min]):
                min = j;

        arr[i],arr[min] = arr[min],arr[i];
    return arr;


arr = [10,2,8,3,1]
print(selectSort(arr))
<!------------------------>
运行结果;
[1, 2, 3, 8, 10]

没明白?老规矩,上图

在这里插入图片描述

复杂度

  • 时间复杂度为:O(n^2)
  • 空间复杂度:O(1)
  • 它是非稳定排序
  • 原地排序

推荐博客:

  • 还没看懂?那一定是我写的问题,推荐两篇文章
    冰狼爱魔-十大经典排序算法
    涛声依旧-选择排序

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

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

相关文章

使用LVS+NGinx+Netty实现数据接入

数据接入 链接参考文档 LVSKeepalived项目 车辆数据上收&#xff0c;TBox通过TCP协议连接到TSP平台 建立连接后进行数据上传。也可借由该连接实现远程控制等操作。 通过搭建 LV—NGinx—Netty实现高并发数据接入 LVS&#xff1a;四层负载均衡&#xff08;位于内核层&#x…

Django定时任务框架django-apscheduler的使用

1.安装库 pip install django-apscheduler 2.添加 install_app django_apscheduler 3.在app下添加一个task.py文件&#xff0c;用来实现具体的定时任务 task.pydef my_scheduled_job():print("这个任务每3秒执行一次", time.time()) 4.在app下创建一个manag…

macpdf转图片 macpdf导出为图片 mac如何将pdf存为jpg

在数字化办公的今天&#xff0c;pdf文件因其良好的文档保存和分享特性&#xff0c;已成为工作生活中不可或缺的一部分。然而&#xff0c;在某些场景下&#xff0c;我们需要将pdf文件转换为图片格式&#xff0c;以便于分享或展示。本文将向您介绍多种pdf转图片的方法&#xff0c…

github上的工程如何下载子模块.gitmodules如何下载指定的模块download submodules开源项目子模块下载externals

github上的工程如何下载子模块.gitmodules如何下载指定的模块download submodules 说明(废话)解决方案无法执行下载子模块无法下载子项目 说明(废话) 今天在编译一个开源库时&#xff0c;该开源库依赖其他项目&#xff0c;并且项目还挺多的&#xff0c;所以有此解决方案 在编…

MQ - RabbitMQ - 消息的可靠性 --学习笔记

消息的可靠性 RabbitMQ 提供了一系列的特性和机制来确保消息的可靠性&#xff0c;即确保消息不丢失、按需到达目的地。要实现在 RabbitMQ 中消息的可靠性&#xff0c;可通过以下几个方面进行操作&#xff1a; 一、发送者的可靠性 1、生产者重试机制 什么是生产者重试机制&a…

Elasticsearch:如何选择向量数据库?

作者&#xff1a;来自 Elastic Elastic Platform Team 向量数据库领域是一个快速发展的领域&#xff0c;它正在改变我们管理和搜索数据的方式。与传统数据库不同&#xff0c;向量数据库以向量的形式存储和管理数据。这种独特的方法可以实现更精确、更相关的搜索&#xff0c;并允…

Spire.PDF for .NET【文档操作】演示:如何在 C# 中切换 PDF 层的可见性

我们已经演示了如何使用 Spire.PDF在 C# 中向 PDF 文件添加多个图层以及在 PDF 中删除图层。我们还可以在 Spire.PDF 的帮助下在创建新页面图层时切换 PDF 图层的可见性。在本节中&#xff0c;我们将演示如何在 C# 中切换新 PDF 文档中图层的可见性。 Spire.PDF for .NET 是一…

Web开发:ASP.NET CORE前后端交互之AJAX(含基础Demo)

目录 一、后端 二、前端 三、代码位置 四、实现效果 五、关键的点 1.后端传输给前端&#xff1a; 2.前端传输给后端 一、后端 using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.Rendering; using WebAppl…

24暑假算法刷题 | Day16 | LeetCode 513. 找树左下角的值,112. 路径总合,106. 从中序和后序遍历序列构造二叉树

目录 513. 找树左下角的值题目描述题解 112. 路径总合题目描述题解 106. 从中序和后序遍历序列构造二叉树题目描述题解 513. 找树左下角的值 点此跳转题目链接 题目描述 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至…

React@16.x(62)Redux@4.x(11)- 中间件2 - redux-thunk

目录 1&#xff0c;介绍举例 2&#xff0c;原理和实现实现 3&#xff0c;注意点 1&#xff0c;介绍 一般情况下&#xff0c;action 是一个平面对象&#xff0c;并会通过纯函数来创建。 export const createAddUserAction (user) > ({type: ADD_USER,payload: user, });这…

网络安全----防御----防火墙双机热备

实验要求&#xff1a; 1&#xff0c;对现有网络进行改造升级&#xff0c;将当个防火墙组网改成双机热备的组网形式&#xff0c;做负载分担模式&#xff0c;游客区和DMZ区走FW4&#xff0c;生产区和办公区的流量走FW1 2&#xff0c;办公区上网用户限制流量不超过100M&#xff0…

记录一下在Hyper-v中动态磁盘在Ubuntu中不完全用到的问题(扩展根目录)

在之前给hyper虚拟机的Ubuntu分配磁盘有20G&#xff1b; 后来在Ubuntu中查看磁盘发现有一个分区没用到&#xff1a; 贴的图片是完成扩展后的 之前这里是10G&#xff0c;然后有个dev/sda4的分区&#xff0c;也是10G&#xff0c;Type是Microsoft Basic Data&#xff1b; …

健康问题查询找搜索引擎还是大模型

随着自然语言处理&#xff08;NLP&#xff09;的最新进展&#xff0c;大型语言模型&#xff08;LLMs&#xff09;已经成为众多信息获取任务中的主要参与者。然而&#xff0c;传统网络搜索引擎&#xff08;SEs&#xff09;在回答用户提交的查询中的作用远未被取代。例如&#xf…

云计算实训室的核心功能有哪些?

在当今数字化转型浪潮中&#xff0c;云计算技术作为推动行业变革的关键力量&#xff0c;其重要性不言而喻。唯众&#xff0c;作为教育实训解决方案的领先者&#xff0c;深刻洞察到市场对云计算技能人才的迫切需求&#xff0c;精心打造了云计算实训室。这一实训平台不仅集成了先…

基于电鸿(电力鸿蒙)的边缘计算网关,支持定制

1 产品信息 边缘计算网关基于平头哥 TH1520 芯片&#xff0c;支持 OpenHarmony 小型系统&#xff0c;是 连接物联网设备和云平台的重要枢纽&#xff0c;可应用于城市基础设施&#xff0c;智能工厂&#xff0c;智能建筑&#xff0c;营业网点&#xff0c;运营 服务中心相关场…

PostgreSQL 中如何解决因大量并发读取导致的缓存命中率下降?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何解决因大量并发读取导致的缓存命中率下降一、了解 PostgreSQL 缓存机制二、分析缓存…

人工智能导论-神经网络

神经网络 概述 本章主要介绍人工神经网络的基本概念&#xff0c;以及几种重要模型&#xff0c;包括“单层感知机、两层感知机、多层感知机”等。 在此基础上&#xff0c;介绍两种重要的基础神经网络“Hopfield神经网络、BP神经网络”。 最后&#xff0c;着重介绍了深度学习…

Java跨平台的原理是什么?JDK,JRE,JVM三者的作用和区别?xxx.java和xxx.class有什么区别?看这一篇就够了

目录 1. Java跨平台相关问题 1.1 什么是跨平台(平台无关性)&#xff1f; 1.2 跨平台(平台无关性)的好处&#xff1f; 1.3 编译原理基础&#xff08;Java程序编译过程&#xff09; 1.4Java跨平台的是实现原理&#xff1f; 1.4.1 JVM(Java虚拟机) 1.4.2 Class文件 1.4.3 …

是德keysight N9020B(原Agilent) N9020A信号频谱分析仪

Agilent N9020B N9020B信号分析仪手持信号分析仪 N9020B MXA 信号分析仪&#xff0c;10 Hz 至 26.5 GHz 主要特性和功能快速适应无线器件不断演进的测试要求通过硬件加速功率测量缩短测试时间&#xff0c;显示更新速率快&#xff0c;并且具有游标峰值搜索和快速扫描功能X 系列…

el-select选择器修改背景颜色

<!--* FilePath: topSearch.vue* Author: 是十九呐* Date: 2024-07-18 09:46:03* LastEditTime: 2024-07-18 10:42:03 --> <template><div class"topSearch-container"><div class"search-item"><div class"item-name&quo…