当前位置: 首页 > news >正文

八大排序——简单选择排序

目录

1.1基本操作:

1.2动态图:

1.3代码:

代码解释

1. main 方法

2. selectSort 方法

示例运行过程

初始数组

每轮排序后的数组

最终排序结果

代码总结


1.1基本操作:

选择排序(select sorting)也是一种简单的排序方法。

它的基本思想是:第一次从arr[0到]arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1]到arr[n-1]中选取最小值,与arr[1]交换,第三次从arr[2]到arr[n-1]中选取最小值,与arr[2]交换,…,第i次从arr[i-1]arr[n-1]中选取最小值,与arr[i-1]交换,…, 第n-1次从arr[n-2]~arr[n-1]中选取最小值,与arr[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。

1.2动态图:

1.3代码:

public class Insert {public static void main(String[] args) {int[] arr = {8,65,41,28,6,1,4,5,32,9,10};System.out.println("排序前");System.out.println(Arrays.toString(arr));selectSort(arr);}public static void selectSort(int[] arr) {for (int i = 0; i < arr.length - 1; i++) {//寻找最小值,将当前的作为最小值来看待int minIndex = i;int min = arr[i];for (int j = i + 1; j < arr.length; j++) {// 当前值的下一个值和当前值判断大小,如果先一个值小,那么就进行交换 ,// 当然要记录一下当前值的 下标 ,目的是为了当前值和第一个值进行交换if (min > arr[j]) {min = arr[j];minIndex = j;}}//进行交换arr[minIndex] = arr[i];arr[i] = min;System.out.println("第" + (i + 1) + "轮后");System.out.println(Arrays.toString(arr));}}
}

代码解释

1. main 方法

public static void main(String[] args) {
    int[] arr = {8, 65, 41, 28, 6, 1, 4, 5, 32, 9, 10};
    System.out.println("排序前");
    System.out.println(Arrays.toString(arr));
    selectSort(arr);
}

  • 功能:程序的入口。

  • 逻辑

    • 定义了一个未排序的整数数组 arr

    • 打印排序前的数组。

    • 调用 selectSort 方法对数组进行排序。

2. selectSort 方法

public static void selectSort(int[] arr) {
    for (int i = 0; i < arr.length - 1; i++) {
        // 寻找最小值,将当前的作为最小值来看待
        int minIndex = i;
        int min = arr[i];
        for (int j = i + 1; j < arr.length; j++) {
            // 当前值的下一个值和当前值判断大小,如果下一个值小,那么就更新最小值和最小值的下标
            if (min > arr[j]) {
                min = arr[j];
                minIndex = j;
            }
        }
        // 进行交换
        arr[minIndex] = arr[i];
        arr[i] = min;
        System.out.println("第" + (i + 1) + "轮后");
        System.out.println(Arrays.toString(arr));
    }
}

  • 功能:实现选择排序算法。

  • 逻辑

    1. 外层循环

      • 遍历数组,从第一个元素到倒数第二个元素(i 从 0 到 arr.length - 2)。

      • 每次循环的目的是找到未排序部分的最小值,并将其放到已排序部分的末尾。

    2. 初始化最小值和最小值的下标

      • minIndex 记录当前最小值的下标,初始值为 i

      • min 记录当前最小值,初始值为 arr[i]

    3. 内层循环

      • 从 i + 1 开始遍历未排序部分。

      • 如果找到比 min 更小的值,则更新 min 和 minIndex

    4. 交换最小值

      • 将找到的最小值与当前外层循环的位置 i 的值进行交换。

    5. 打印每轮排序后的数组

      • 每轮排序后,打印当前数组的状态。


示例运行过程

初始数组

[8, 65, 41, 28, 6, 1, 4, 5, 32, 9, 10]

每轮排序后的数组

  1. 第1轮

    • 找到最小值 1,与第一个元素 8 交换。

    • 结果:[1, 65, 41, 28, 6, 8, 4, 5, 32, 9, 10]

  2. 第2轮

    • 找到最小值 4,与第二个元素 65 交换。

    • 结果:[1, 4, 41, 28, 6, 8, 65, 5, 32, 9, 10]

  3. 第3轮

    • 找到最小值 5,与第三个元素 41 交换。

    • 结果:[1, 4, 5, 28, 6, 8, 65, 41, 32, 9, 10]

  4. 第4轮

    • 找到最小值 6,与第四个元素 28 交换。

    • 结果:[1, 4, 5, 6, 28, 8, 65, 41, 32, 9, 10]

  5. 第5轮

    • 找到最小值 8,与第五个元素 28 交换。

    • 结果:[1, 4, 5, 6, 8, 28, 65, 41, 32, 9, 10]

  6. 第6轮

    • 找到最小值 9,与第六个元素 28 交换。

    • 结果:[1, 4, 5, 6, 8, 9, 65, 41, 32, 28, 10]

  7. 第7轮

    • 找到最小值 10,与第七个元素 65 交换。

    • 结果:[1, 4, 5, 6, 8, 9, 10, 41, 32, 28, 65]

  8. 第8轮

    • 找到最小值 28,与第八个元素 41 交换。

    • 结果:[1, 4, 5, 6, 8, 9, 10, 28, 32, 41, 65]

  9. 第9轮

    • 找到最小值 32,与第九个元素 32 交换(无需交换)。

    • 结果:[1, 4, 5, 6, 8, 9, 10, 28, 32, 41, 65]

  10. 第10轮

    • 找到最小值 41,与第十个元素 41 交换(无需交换)。

    • 结果:[1, 4, 5, 6, 8, 9, 10, 28, 32, 41, 65]


最终排序结果

[1, 4, 5, 6, 8, 9, 10, 28, 32, 41, 65]

代码总结

  • 算法:选择排序。

  • 时间复杂度:O(n²),其中 n 是数组的长度。

  • 空间复杂度:O(1),原地排序,不需要额外的空间。

  • 优点:实现简单,适合小规模数据。

  • 缺点:时间复杂度较高,不适合大规模数据。

相关文章:

八大排序——简单选择排序

目录 1.1基本操作&#xff1a; 1.2动态图&#xff1a; 1.3代码&#xff1a; 代码解释 1. main 方法 2. selectSort 方法 示例运行过程 初始数组 每轮排序后的数组 最终排序结果 代码总结 1.1基本操作&#xff1a; 选择排序&#xff08;select sorting&#xff09;也…...

vue使用CSS布局技术,实现div定位到页面底部或顶部并居中功能

<template> <div > <div class"bottom-element"> 我在底部&#xff0c;并居中了 </div> </div> </template> 使用CSS布局技术&#xff0c;通过设置CSS属性来实现页面底部定位。 <style lang"scs…...

Jenkins 部署 之 Mac 一

Jenkins 部署 之 Mac 一 一.Jenkins 部署依赖 JDK 环境 查看 Mac JDK 环境&#xff0c;如果没有安装&#xff0c;先安装 打开终端输入命令:java -version Mac安装配置 JDK 二. 检查 HomeBrew 安装 检查 HomeBrew 是否安装&#xff0c;终端输入命令:brew -v Mac安装HomeB…...

【FastAPI 使用FastAPI和uvicorn来同时运行HTTP和HTTPS的Python应用程序】

在本文中&#xff0c;我们将介绍如何使用 FastAPI和uvicorn来同时运行HTTP和HTTPS的 Python应用程序。 简介 FastAPI是一个高性能的Web框架&#xff0c;可以用于构建快速、可靠的API。它基于Python的类型提示和异步支持&#xff0c;使得开发者可以轻松地编写出安全且高效的代…...

HCIA-路由器相关知识和面试问题

二、 路由器 2.1 关于路由器的知识 2.1.1 什么是路由器 路由器是一种网络层互联设备&#xff0c;主要用于连接多个逻辑上分开的网络&#xff0c;实现不同网络之间的数据路由和通信。它能根据网络层地址&#xff08;如 IP 地址&#xff09;来转发数据包&#xff0c;在网络中起…...

Docker+Jenkins自动化部署SpringBoot项目【详解git,jdk,maven,ssh配置等各种配置,附有示例+代码】

文章目录 DockerJenkins部署SpringBoot项目一.准备工作1.1安装jdk111.2安装Maven 二.Docker安装Jenkins2.1安装Docker2.2 安装Jenkins2.3进入jenkins 三.Jenkins设置3.1安装jenkins插件3.2全局工具配置全局配置jdk全局配置maven全局配置git 3.3 系统配置安装 Publish Over SSH …...

PCL 点云数学形态学操作(腐蚀)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 基本原理:使用结构元素(通常为滤波的窗口)的窗口模板作为处理单元,利用形态学中的膨胀与腐蚀相组合即可达到滤波的效果。 点云数据中的数学形态学运算其实和二维图像上的运算非常相似,图像上像素有x,y和亮度值…...

【设计模式】【行为型模式】观察者模式(Observer)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…...

RAGFlow和Dify对比

‌ RAGFlow和Dify都是基于大语言模型&#xff08;LLM&#xff09;的应用开发平台&#xff0c;具有相似的功能和应用场景&#xff0c;但它们在技术架构、部署要求和用户体验上存在一些差异。‌‌ RAGFlow和Dify对比 2025-02-13 22.08 RAGFlow‌ ‌技术栈‌&#xff1a;RAGFlow…...

AI前端开发:蓬勃发展的机遇与挑战

人工智能&#xff08;AI&#xff09;领域的飞速发展&#xff0c;正深刻地改变着我们的生活方式&#xff0c;也为技术人才&#xff0c;特别是AI代码生成领域的专业人士&#xff0c;带来了前所未有的机遇。而作为AI应用与用户之间桥梁的前端开发&#xff0c;其重要性更是日益凸显…...

结构型模式---代理模式

概念 代理模式是一种结构型模式&#xff0c;主要用于在客户端和接口之间添加一个中间层&#xff0c;用于在客户端和接口之间进行权限控制或者其他的中间层操作。 使用场景 1、延缓初始化&#xff0c;当我们偶尔需要使用一个重量级的服务对象&#xff0c;如果一直保持该对象的…...

Java面向对象一:相关概念

面向过程&面向对象 面向过程思想 步骤清晰简单&#xff0c;第一步做什么&#xff0c;第二步做什么… 面对过程适合处理一些较为简单的问题面向对象思想 物以类聚&#xff0c;分类的思维模式&#xff0c;思考问题首先会解决问题需要哪些分类&#xff0c;然后对这些分类进行…...

CEF132 编译指南 MacOS 篇 - depot_tools 安装与配置 (四)

1. 引言 在 CEF132&#xff08;Chromium Embedded Framework&#xff09;的编译过程中&#xff0c;depot_tools 扮演着举足轻重的角色。这套由 Chromium 项目精心打造的脚本和工具集&#xff0c;专门用于获取、管理和更新 Chromium 及其相关项目&#xff08;包括 CEF&#xff…...

React VS Vue

React 和 Vue 是目前最流行的两个前端框架&#xff0c;它们在设计理念、生态系统和开发体验上各有特点。以下是对 React 和 Vue 的全方位对比&#xff1a; 1. 核心设计理念 React 库而非框架&#xff1a;React 是一个用于构建 UI 的库&#xff0c;专注于视图层&#xff0c;其…...

伺服报警的含义

前言&#xff1a; 大家好&#xff0c;我是上位机马工&#xff0c;硕士毕业4年年入40万&#xff0c;目前在一家自动化公司担任软件经理&#xff0c;从事C#上位机软件开发8年以上&#xff01;我们在开发C#的运动控制程序的时候&#xff0c;一个必要的步骤就是设置伺服报警信号的…...

CSS 属性选择器详解与实战示例

CSS 属性选择器是 CSS 中非常强大且灵活的一类选择器&#xff0c;它能够根据 HTML 元素的属性和值来进行精准选中。在实际开发过程中&#xff0c;属性选择器不仅可以提高代码的可维护性&#xff0c;而且能够大大优化页面的样式控制。本文将结合菜鸟教程的示例&#xff0c;从基础…...

基于STM32、HAL库、HS12864(ST7920,并行接口)C语言程序设计

1、hs12864.h头文件: #ifndef __HS12864_H #define __HS12864_H #ifdef __cplusplus extern "C" {#endif #include "stm32l4xx_hal.h" // 控制线定义 - 根据实际硬件修改 #define HS12864_RS_GPIO_PORT GPIOC #define HS12864_RS_PIN GPIO_PI…...

Python练习11-20

题目&#xff1a;古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问每个月的兔子总数为多少&#xff1f; 题目&#xff1a;判断101-200之间有多少…...

探索ELK 的魅力

在大数据时代&#xff0c;海量日志和数据的收集、存储、处理与可视化分析变得越来越重要。而 ELK 堆栈&#xff0c;由 Elasticsearch、Logstash、Beats 和 Kibana 组成&#xff0c;正是一个强大的开源解决方案&#xff0c;帮助开发者和运维人员高效管理和分析日志数据。本文将详…...

【ROS2综合案例】乌龟跟随

一、前期准备 1.1 安装 1. 首先安装“乌龟跟随”案例的功能包以及依赖项。 安装方式1&#xff08;二进制方式安装&#xff09;&#xff1a; sudo apt-get install ros-humble-turtle-tf2-py ros-humble-tf2-tools ros-humble-tf-transformations 安装方式2&#xff08;克…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...