七大排序算法——直接选择排序,通俗易懂的思路讲解与图解(完整Java代码)

news2024/11/25 2:35:55

文章目录

  • 一、排序的概念
    • 排序的概念
    • 排序的稳定性
    • 七大排序算法
  • 二、直接选择排序
    • 核心思想
    • 代码实现
  • 三、性能分析
  • 四、七大排序算法


一、排序的概念

排序的概念

排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。

排序的稳定性

在这里插入图片描述
上述待排序的数中,有两个5。 将前面的5标记一个a, 将后面的5标记一个b。

通过算法进行排序后,这一组数就有序了, 但是要看两个相同的5的位置是否有改变。
5a仍在5b前面,那么这个排序算法就是稳定的
5a跑到了5b后面,那么这个排序算法就是不稳定的

一个稳定的排序算法可以做到不稳定,
不稳定的排序算法一定做不到稳定。


至于为什么要讨论这个稳定性, 是为了以后应用到实际场景上。 比如,一场数学考试, 假设a用了30分钟做完了,并得了满分。
假设b用了一个小时做完了,并得了满分。 此时a与b都是得了满分,但是用的时间不一样,所以两个人的排名又会有所不同。


七大排序算法

在这里插入图片描述


二、直接选择排序

核心思想

基本思想每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。

图解

有一组待排序数列,我们进行升序排序。
在这里插入图片描述
排序过程:
在这里插入图片描述
说白了就是,先找到最小(或最大)的数,放到0下标,
再找到次小的数放到1下标,重复这个过程,
前(n-1)个位置都放好了对应的数时,最后一个数就在他对应的位置,就有序了。


代码实现

代码实现

public class SelectSort {
    /**
     * 选择排序
     * 时间复杂度:O(n^2)
     * 空间复杂度:O(1)
     * 稳定性:不稳定
     * @param array
     */
    public static void selectSort(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < array.length; j++) {
                if(array[j] < array[minIndex]) {
                    minIndex = j;
                }
            }
            int tmp = array[minIndex];
            array[minIndex] = array[i];
            array[i] = tmp;
        }
    }
}

三、性能分析

直接选择排序的特性总结:
直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用
时间复杂度:O(N^2)
空间复杂度:O(1)
稳定性:不稳定


四、七大排序算法

在这里插入图片描述

想学哪个点哪个
归并排序讲解
快速排序讲解
直接插入排序讲解
希尔排序讲解
直接选择排序讲解
堆排序讲解
冒泡排序讲解

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

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

相关文章

基于linux下的高并发服务器开发(第一章)- Makefile(1)1.10

01 / 什么是Makefile 02 / Makefile文件命名和规则 &#xff08;1&#xff09;在~/Linux/lesson7目录下,vim Makefile &#xff08;2&#xff09;ll查看当前目录下的文件信息 &#xff08;3&#xff09;编辑以下内容,然后保存并退出 app:sub.c add.c mult.c div.c main.c gcc…

熊猫代阅脚本-沉睡者IT技术分享

熊猫代阅脚本-我的编程技术之路 熊猫阅读app是一款酷炫的阅读应用带来了多样化的阅读模式&#xff0c;熊猫阅读app专注网络小说阅读&#xff0c;更新快&#xff0c;让大家获得最好的小说阅读体验&#xff0c;有需要的快来下载。 熊猫阅读app亮点 阅读赚钱&#xff1a;越读越…

DAY46:动态规划(七)01背包应用:分割等和子集+最后一块石头重量Ⅱ+目标和

文章目录 416.分割等和子集&#xff08;回溯01背包&#xff09;思路回溯解法&#xff08;类似组合总和Ⅱ&#xff09;回溯解法存在的问题 01背包思路为什么能抽象成背包问题 01背包写法1&#xff1a;常规写法&#xff0c;考虑重量价值重量价值类问题的思考方式DP数组含义递推公…

综合小实验

第一步&#xff1a;计划IP R1的环回&#xff1a;192.168.1.0/28 R2的环回&#xff1a;192.168.1.16/28 R123的O/O/0接口&#xff1a;192.168.1.32/28 R3-4&#xff1a;192.168.1.128/30 Vlan2&#xff1a;192.168.1.48/28 vlan3&#xff1a;192.168.1.64/28 192.168.1.0/24 0区…

力扣 279. 完全平方数

一、题目描述 给你一个整数 n&#xff0c;返回和为 n 的完全平方数的最少数量 。 完全平方数是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而 3 和 …

3Ds max入门教程:创建马来西亚双子塔3D模型

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 最终图像&#xff1a; 步骤-1 下面给出了这个双子塔的基本轮廓。 步骤-2 由于它是一栋88层的建筑&#xff0c;所以我一开始打算把它建到40层。为此&#xff0c;我使用标准的基元类型&#xff1a;盒子和圆…

python 使用 subprocess 实现交互式命令的非交互式执行

背景 想要定时执行某些脚本, 但是脚本是交互式的, 例如下面的bat 脚本 echo offset /p nameName: echo Name is %name%echo exit set /p byeBye: echo Bye is %bye%需要先输入Name, 在看到 exit 后在输入 Bye, 然后程序退出. 解决方案 使用subprocess 来实现 import subpr…

【Solidworks加密软件】Solidworks图纸文件加密方法

Solidworks是一款广泛应用于机械设计和工程领域的三维建模软件。由于Solidworks文件中可能包含敏感的设计和知识产权信息&#xff0c;保护这些图纸的安全性变得至关重要。本文将介绍Solidworks图纸加密的方法和最佳实践&#xff0c;以确保文件的机密性和安全性。 为什么需要加…

Redis字典

1.前言 我们回顾一下之前讲到的Redis的字典结构&#xff0c;示意图如下&#xff1a; Redis的字典本质上来说也是数组链表的数据结构&#xff0c;这与Java中HashMap的数据结构很类似。 由上述结构示意图也能看出&#xff0c;字典dict中维护了一个ht数组&#xff0c;而且只有两…

使用IDEA工具debug java annotation processors

最近看Spring提供的自动生成spring-configuration-metadata.json文件的组件。组件依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</opti…

IO线程NO

在处理问题&#xff1a; Got fatal error 1236 from master when reading data from binary log: Could not find first log file name in binary log index file 好翻译过来就是&#xff1a; 从二进制日志读取数据时&#xff0c;从主服务器收到致命错误 1236&#xff1a;“无法…

opencv-06 使用numpy.array 操作图片像素值

opencv-06 使用numpy.array 操作图片像素值 **1&#xff0e;二值图像及灰度图像****利用item 读取某一个像素值****利用itemset 修改像素值****彩色图像numpy.arry 像素值操作** numpy.array 提供了 item()和 itemset()函数来访问和修改像素值&#xff0c;而且这两个函数都是经…

与时代并进,轻创时代愿做“Ai数字人产业的导向标”

近年来&#xff0c;随着人工智能技术的飞速发展&#xff0c;越来越多的企业开始关注并寻求AI数字人的解决方案&#xff0c;以提升业务效率和创造竞争优势。在这个激烈竞争的市场中&#xff0c;轻创时代作为行业黑马出现在人们视野中&#xff0c;以卓越的创新能力立志成为中小型…

【剑指offer】19. 链表中倒数最后k个结点(java)

文章目录 链表中倒数最后k个结点描述示例1示例2思路完整代码 链表中倒数最后k个结点 描述 输入一个长度为 n 的链表&#xff0c;设链表中的元素的值为 ai &#xff0c;返回该链表中倒数第k个节点。 如果该链表长度小于k&#xff0c;请返回一个长度为 0 的链表。 数据范围&a…

【软件测试】在Windows环境安装Docker(详细步骤)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 下载和安装 1、地…

免费内网穿透方案twingate搭建,适用pve,exsi等虚拟机访问场景

最近学习devops环境搭建&#xff0c;其中需要安装很多中间件和虚拟机&#xff0c;之前黑裙和pve都用的zerotier,可以点对点通信&#xff0c;但是机器多了就要一台一台去部署比较费力&#xff0c;而且在使用过程中发现&#xff0c;pve的容器和pve宿主机的出口IP是一样的&#xf…

聊聊微服务 架构思想

用了好多年微服务架构了&#xff0c;我经常会反思&#xff0c;这个项目为啥用微服务&#xff1f;真的能帮我们解决一些痛点吗&#xff1f;这个项目有必要用微服务吗&#xff1f;这个项目体现出微服务的价值了吗&#xff1f; 我是从2017年开始入手微服务&#xff0c;距今已经五六…

从小白到大神之路之学习运维第59天--------inotify+rsync同步和实时同步(单台同步和多台同步)

第三阶段基础 时 间&#xff1a;2023年7月13日 参加人&#xff1a;全班人员 内 容&#xff1a; inotifyrsync同步和实时同步 目录 一、rsync远程同步 二、源端到发起端同步 安装部署&#xff1a; 源端&#xff08;服务端&#xff09;&#xff1a; &#xff08;单台…

ROS安装注意事项

输入roscore报错&#xff1a;"roscore" not found 输入 sudo apt install ros-​melodi​c-roslaunch​

概率论的学习和整理17:EXCEL里直接对应的分布公式计算概率

1EXCEL计算这些特殊分布的方差 1.1 用原始的概率&#xff0c;期望和方差的方法 虽然计算概率&#xff0c;需要用对应分布的公式P(xn) 想了解的随机变量是总次数n&#xff0c;需要对应几何分布&#xff0c;负二项分布P(xk) 想了解的随机变量是成功次数k&#xff0c;需要对应超几…