Java手写选择排序和算法案例拓展

Java手写选择排序和算法案例拓展

1. Mermanid代码表示思维导图解释实现思路原理

开始
设定初始最小值
是否遍历完数组
交换最小值和当前值
结束

选择排序的思路是将数组分为已排序部分和未排序部分,每次从未排序部分选择最小的元素并将其与未排序部分的第一个元素交换位置,然后将已排序部分扩展一个元素。重复这个过程直到整个数组排序完成。

2. 选择排序的手写必要性

手写选择排序有以下几个必要性:

  • 理解排序算法的原理和思路
  • 提高对算法的理解和掌握程度
  • 增强对编程语言的熟练度
  • 增加对代码的调试和优化能力

3. 选择排序的市场调查

选择排序是一种简单但效率较低的排序算法,适用于小规模数据的排序。在实际应用中,选择排序的市场需求相对较低,更多的是使用效率更高的排序算法,如快速排序、归并排序等。

4. 选择排序的详细介绍和步骤

选择排序的实现步骤如下:

  1. 设定初始最小值为数组的第一个元素。
  2. 遍历数组,从第二个元素开始,依次与当前最小值进行比较。
  3. 如果遍历到的元素比当前最小值小,则更新最小值的索引。
  4. 遍历完数组后,将最小值与未排序部分的第一个元素交换位置。
  5. 将已排序部分扩展一个元素,重复步骤2-5,直到整个数组排序完成。

下面是选择排序的Java代码实现:

public class SelectionSort {public static void selectionSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {int minIndex = i;for (int j = i + 1; j < n; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}}
}

5. 手写实现总结和手写必要性

通过手写实现选择排序,我们对算法的原理和实现步骤有了更深入的理解。手写实现可以提高我们对算法的掌握程度,并增强对编程语言的熟练度。此外,手写实现还可以帮助我们更好地理解和调试代码,提高代码的质量和效率。

6. 完整代码

public class SelectionSort {public static void selectionSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {int minIndex = i;for (int j = i + 1; j < n; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}}public static void main(String[] args) {int[] arr = {64, 25, 12, 22, 11};selectionSort(arr);System.out.println("排序后的数组:");for (int num : arr) {System.out.print(num + " ");}}
}

7. 应用前景调研

选择排序在实际应用中的前景相对较低,更多的是使用效率更高的排序算法。选择排序的时间复杂度为O(n^2),在大规模数据的排序中效率较低。因此,在需要对大规模数据进行排序的场景中,更常使用快速排序、归并排序等算法。

8. 拓展应用案例

案例1:按照学生成绩排序

假设有一个学生类Student,包含姓名和成绩属性。我们可以使用选择排序对学生对象数组按照成绩进行排序。

public class Student {private String name;private int score;public Student(String name, int score) {this.name = name;this.score = score;}public String getName() {return name;}public int getScore() {return score;}
}public class SelectionSort {public static void selectionSort(Student[] students) {int n = students.length;for (int i = 0; i < n - 1; i++) {int minIndex = i;for (int j = i + 1; j < n; j++) {if (students[j].getScore() < students[minIndex].getScore()) {minIndex = j;}}Student temp = students[minIndex];students[minIndex] = students[i];students[i] = temp;}}public static void main(String[] args) {Student[] students = {new Student("Alice", 80),new Student("Bob", 90),new Student("Charlie", 70)};selectionSort(students);System.out.println("按照成绩排序后的学生列表:");for (Student student : students) {System.out.println(student.getName() + " - " + student.getScore());}}
}

案例2:选择排序优化

选择排序的一个优化方法是使用双向选择排序,即同时找到最大值和最小值进行交换。这样可以减少比较和交换的次数。

public class SelectionSort {public static void selectionSort(int[] arr) {int n = arr.length;int left = 0, right = n - 1;while (left < right) {int minIndex = left;int maxIndex = right;for (int i = left; i <= right; i++) {if (arr[i] < arr[minIndex]) {minIndex = i;}if (arr[i] > arr[maxIndex]) {maxIndex = i;}}int temp = arr[minIndex];arr[minIndex] = arr[left];arr[left] = temp;if (maxIndex == left) {maxIndex = minIndex;}temp = arr[maxIndex];arr[maxIndex] = arr[right];arr[right] = temp;left++;right--;}}public static void main(String[] args) {int[] arr = {64, 25, 12, 22, 11};selectionSort(arr);System.out.println("排序后的数组:");for (int num : arr){System.out.print(num + " ");
}

输出结果为:11 12 22 25 64

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

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

相关文章

浅谈机器视觉目前的发展现状

#【中秋征文】程序人生&#xff0c;中秋共享# 机器视觉是一个快速发展的行业&#xff0c;被广泛应用于许多领域&#xff0c;包括制造业、农业、医药行业、包装印刷业等。在制造业中&#xff0c;机器视觉技术被广泛应用于自动化生产线上&#xff0c;用于检测、识别、测量和定位…

数据治理在数字化转型中的重要性

在当今数字化时代&#xff0c;企业的成功与否往往取决于它们对数据的处理和管理能力。数据治理作为数字化转型的关键组成部分&#xff0c;对于帮助企业有效管理和利用数据&#xff0c;实现业务增长和创新至关重要。本文将探讨为什么数字化转型必须进行数据治理&#xff0c;并介…

新能源汽车驱动电机的基本知识

学习目标:了解电机的基本知识。能力目标:培养学生搜集和整理相关资料的能力。素质目标:培养学生良好的职业素养。额定电店.在夫见定条件下电池工作的*于佳 电压知识准备术语和定义。 (1)驱动电机系统 通过有效的控制策略将动力蓄电池提供的直流电转化为交流实现电机的正转以及反…

【Shiro】入门概述

1.是什么 Apache Shiro 是一个功能强大且易于使用的 Java 安全(权限)框架。Shiro 可以完 成&#xff1a;认证、授权、加密、会话管理、与 Web 集成、缓存 等。借助 Shiro 您可以快速轻松 地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。 官网&…

LeetCode 每日一题 2023/9/11-2023/9/17

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 9/11 630. 课程表 III9/12 1462. 课程表 IV9/13 2596. 检查骑士巡视方案9/14 1222. 可以攻击国王的皇后9/15 LCP 50. 宝石补给9/16 198. 打家劫舍9/17 9/11 630. 课程表 II…

去耦电路设计应用指南(一)MCU去耦设计介绍

&#xff08;一&#xff09;MCU去耦设计介绍 1. 概述2. MCU需要去耦的原因2.1 去耦电路简介2.2 电源噪声产生的原因2.3 插入损耗2.4 去耦电路简介 参考资料来自网上&#xff1a; 1. 概述 我们经常看到单片机或者IC电路管脚常常会放置一个或者多个陶瓷电容&#xff0c;他们主要…

9.3.5网络原理(应用层HTTP/HTTPS)

一.HTTP: 1. HTTP是超文本传输协议,除了传输字符串,还可以传输图片,字体,视频,音频. 2. 3.HTTP协议报文格式:a.首行,b.请求头(header),c.空行(相当于一个分隔符,分隔了header和body),d.正文(body). 4. 5.URL:唯一资源描述符(长度不限制). a. b.注意:查询字符串(query stri…

【Selenium】webdriver.ChromeOptions()官方文档参数

Google官方Chrome文档&#xff0c;在此记录一下 Chrome Flags for Tooling Many tools maintain a list of runtime flags for Chrome to configure the environment. This file is an attempt to document all chrome flags that are relevant to tools, automation, benchm…

Windows10设置开启自启动任务

Windows10设置开机自启动任务 在日常的工作中经常会遇到需要给系统设置一个开机自启动的任务&#xff0c;例如开机自启动浏览器&#xff0c;开机自启动代理程序等等&#xff0c;这个时候就需要给系统设置一个开机自启动任务&#xff0c;本文主要介绍一下设置开机自启动任务的几…

使用 Messenger 跨进程通信

什么是Messenger Messenger 也是IPC的方案之一&#xff0c;是基于消息的跨进程通信。基于消息是什么意思&#xff1f;Handler是我们最常用的消息机制&#xff0c;所以 Messenger 对于使用者来说就像是使用 Handler。实际上 Messenger 就是 AIDL 的上层封装而已&#xff0c;它们…

微服务全栈:深入核心组件与开发技巧

文章目录 1.服务注册与发现1.1. 客户端注册 (ZooKeeper)1.2. 第三方注册 (独立的服务Registrar)1.3. 客户端发现1.4. 服务端发现1.5. Consul1.6. Eureka1.7. SmartStack1.8. Etcd 2. API 网关2.1. 请求转发2.2. 响应合并2.3. 协议转换2.4. 数据转换2.5. 安全认证 3. 配置中心3.…

什么是交换分区以及如何创建交换分区

介绍 交换分区是Linux中的一项功能,可提供虚拟内存空间和多种好处。它允许操作系统有效地处理内存需求。因此,交换分区提高了系统稳定性、响应能力和繁重工作负载处理。 本指南将探讨交换分区及其优缺点,并概述在 Linux 系统上创建和管理交换分区的步骤。 先决条件 运行 …

PHP自己的框架2.0结合容器技术(重构篇二)

目录 1、使用容器实现框架加载类运行 2、 创建框架容器类core/fm/Di.php 3、框架使用容器类来执行public/index.php 4、运行效果还是一样 1、使用容器实现框架加载类运行 2、 创建框架容器类core/fm/Di.php 什么是容器&#xff1f;容器就相当于盒子&#xff0c;把很多类放里…

NTIRE2023-RTSR-Track2 冠军方案详解

编辑 | Happy 首发 | AIWalker 链接 | https://mp.weixin.qq.com/s/JQ5g9yn_OdjR8hi_tWc4jA arXiv:2305.02126 , cvpr2023 , code , video 本文了一个实时&轻量图像超分方案Bicubic&#xff0c;它通过下采样模块降低图像分辨率以减少计算量&#xff0c;在网络尾部采用…

三分钟使用ngrok实现内网穿透

1.官网注册 官网地址&#xff1a;https://ngrok.com/ tips:若使用邮箱注册自行认证 2.下载对应部署电脑 压缩包&#xff08;此处笔者使用自己电脑因此以Windows11作为案例&#xff09; 解压下载的ngrok压缩包&#xff0c;在对应目录进入命令提示符装口&#xff08;也可直接…

免费api接口:物流api,企业工商查询api,游戏api。。。

免费api接口&#xff0c;物流api,企业工商查询api,游戏api。。。都有。 Facebook Games Services - Facebook Games Services 为游戏开发者提供了各种服务, 包括(但不限于) 成就 API, 分数 API, 应用通知, 请求, 游戏养成和 Facebook SDK for Unity.Google Play Games Service…

Git diff 使用 vimdiff 对比差异

在Ubuntu中使用Git时&#xff0c;可使用命令行的git diff命令来对比两次提交的差异&#xff0c;但是这种对比查看方式无法直观地查看修改的差异&#xff0c;在对比和查看时不太方便。 可以使用vimdiff作为Git diff的对比工具&#xff0c;这样就方便了许多&#xff0c;Git的配置…

TensorFlow 03(Keras)

一、tf.keras tf.keras是TensorFlow 2.0的高阶API接口&#xff0c;为TensorFlow的代码提供了新的风格和设计模式&#xff0c;大大提升了TF代码的简洁性和复用性&#xff0c;官方也推荐使用tf.keras来进行模型设计和开发。 1.1 tf.keras中常用模块 如下表所示: 1.2 常用方法 …

TCP/IP网络江湖——数据链路层的协议与传承(数据链路层中篇:数据链路层的协议与帧)

0、引言 网络江湖,宛如千年武林,承载着代代传承的文化和传统。在这个广袤的江湖之中,数据链路层犹如武林门派,代代传承着网络通信的精华。这一部分将带领我们深入探讨数据链路层的协议与传承,揭示其在网络江湖中的精彩故事。 就如同江湖中的武者需要基本功夫作为修行的基础…

mysql如何实现根据经纬度判断某一个坐标是否在一个多边形区域范围内

要根据经纬度判断一个坐标是否在一个多边形区域内&#xff0c;MySQL提供了几种函数来处理地理空间数据&#xff0c;其中包括用于处理多边形区域的函数。 1.创建一个包含多边形区域的表&#xff1a; 首先&#xff0c;创建一个表来存储多边形区域。可以使用ST_GeomFromText函数将…