java 选择排序,涵盖工作原理、算法分析、实现细节、优缺点以及一些实际应用场景

server/2024/12/18 13:34:42/

选择排序的详细解析

更深入地探讨选择排序的各个方面,包括其工作原理、算法分析、实现细节、优缺点以及一些实际应用场景。

动画演示
在这里插入图片描述

1. 基本概念

选择排序是一种简单的比较排序算法。它的核心思想是将数组分为两个部分:已排序部分和未排序部分。每一轮从未排序部分找到最小(或最大)元素,并将其放到已排序部分的末尾。

2. 工作原理
  • 初始化:整个数组都被视为未排序部分。
  • 迭代过程
    • 从未排序部分中选出最小元素。
    • 将最小元素与未排序部分的第一个元素交换。
    • 已排序部分增加一个元素,未排序部分减少一个元素。
3. 详细步骤

考虑一个数组 arr,假设其长度为 n

  1. 第 1 轮

    • arr[0]arr[n-1] 中找最小值,假设找到的最小值在位置 minIndex
    • 交换 arr[0]arr[minIndex]
    • 已排序部分:[arr[0]],未排序部分:[arr[1], arr[2], ..., arr[n-1]]
  2. 第 2 轮

    • arr[1]arr[n-1] 中找最小值,假设找到的最小值在位置 minIndex
    • 交换 arr[1]arr[minIndex]
    • 已排序部分:[arr[0], arr[1]],未排序部分:[arr[2], ..., arr[n-1]]
  3. 继续:重复以上过程,直到未排序部分为空。

4. 伪代码
function selectionSort(array):n = length(array)for i from 0 to n - 1:minIndex = ifor j from i + 1 to n - 1:if array[j] < array[minIndex]:minIndex = jif minIndex != i:swap(array[i], array[minIndex])
5. Java 实现
java">public class SelectionSort {public static void selectionSort(int[] array) {int n = array.length;for (int i = 0; i < n - 1; i++) {int minIndex = i; // 假设当前元素为最小值for (int j = i + 1; j < n; j++) {if (array[j] < array[minIndex]) {minIndex = j; // 更新最小值的索引}}// 如果最小值的索引变化了,则交换if (minIndex != i) {swap(array, i, minIndex);}}}// 交换数组中两个元素的方法private static void swap(int[] array, int i, int j) {int temp = array[i];array[i] = array[j];array[j] = temp;}// 测试选择排序public static void main(String[] args) {int[] array = {64, 25, 12, 22, 11};selectionSort(array);System.out.println("排序后的数组:");for (int num : array) {System.out.print(num + " ");}}
}
6. 复杂度分析
  • 时间复杂度

    • 最坏情况:(O(n^2)),每次外层循环运行 n - 1 次,内层循环运行的次数依次为 n - 1, n - 2, …, 1。
    • 最好情况:(O(n^2)),无论数组是正序还是逆序,选择排序的比较次数都是固定的。
    • 平均情况:(O(n^2))。
  • 空间复杂度:选择排序是原地排序,额外空间复杂度为 (O(1))。

7. 稳定性

选择排序是一种不稳定的排序算法。原因在于,当算法寻找最小值并交换时,相同值的元素可能会改变相对位置。例如,如果有两个相同的元素,后一个可能会被前一个覆盖。

8. 优缺点

优点

  • 实现简单,容易理解。
  • 不需要额外的存储空间,适合内存受限的环境。

缺点

  • 时间复杂度高,适合小规模数据排序。
  • 不稳定排序,可能改变相同元素的相对顺序。
9. 实际应用

选择排序在实际应用中并不常用,因其效率较低。然而,它在以下情况中仍然有一定的应用价值:

  • 小规模数据排序:当数据量较小时,选择排序的简单性可以使其成为一种合适的选择。
  • 教学目的:选择排序常用于教学,以帮助学生理解排序算法的基本原理。
10. 总结

选择排序是一种基础的排序算法,适合用于小规模数据的排序。尽管它的效率不如快速排序、归并排序等高级算法,但其简单性和易于实现的特性仍然让它在一些场合下具有使用价值。理解选择排序的工作原理,为学习更复杂的排序算法奠定了基础。

更多资源推荐:
http://sj.ysok.net/jydoraemon 提取码:JYAM


http://www.ppmy.cn/server/151182.html

相关文章

贪心算法(二)

目录 一、最长递增子序列 二、递增的三元子序列 三、最长连续递增序列 四、买卖股票的最佳时机 五、买卖股票的最佳时机II 一、最长递增子序列 最长递增子序列 拿到这道题&#xff0c;我们最先想到的就是用动态规划的方法去解决它。使用动态规划的方法&#xff0c;我们只…

使用 ffmpeg 给视频批量加图片水印

背景 事情是这样的……前两天突然接到 leader 给的一个任务&#xff1a;给视频加上图片 logo 水印。我这种剪映老司机当然迷之一笑了哈哈哈哈哈&#xff0c;沉浸在简单的任务中还没反应过来巴掌就如洪水般涌来&#xff0c;因为 leader 给了几十个视频……作为一个计算机人&…

20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕

20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕 2024/12/17 17:21 缘起&#xff0c;最近需要识别法国电影《地下铁》的法语字幕&#xff0c;使用 字幕小工具V1.2【whisper套壳/GUI封装了】 无效。 那就是直接使用最原始的whisper来干了。 当你重装WIN10的时候&#…

前后端分离的项目使用nginx 解决 Invalid CORS request

我是这样打算的&#xff0c;前端用nginx代理&#xff0c;使用80 转443 端口走https 前端的地址就是http://yumbo.top 或https://yumbo.top 后端服务地址是&#xff1a;http://yumbo.top:8081 下面是我的完整配置&#xff0c;功能是正常的&#xff0c;加了注释 user nginx; …

蓝桥杯数列求值(2019试题C)

【问题描述】 给定数列1,1,1,3,5,7,17……从第4项开始&#xff0c;每项都是前3项的和。求第20190324项的最后4位数字。 【答案提交】 这是一道结果填空题&#xff0c;考生只需要计算出结果并提交即可。本题的结果为一个4位整数&#xff08;提示:答案的千位不为0&#xff09;&a…

华为ensp--BGP路径选择-Preferred Value

学习新思想&#xff0c;争做新青年。今天学习的是BGP路径选择-Preferred Value 实验目的 理解BGP路由信息首选值&#xff08;Preferred Value&#xff09;的作用 掌握修改Preferred Value属性的方法 掌握通过修改Preferred Value属性来实现流量分担的方法 实验拓扑 实验要求…

高效数据集成:钉钉与企业系统无缝对接

钉钉数据集成案例分享&#xff1a;鸿巢基础资料-供应商账号(删除操作) 在企业信息化管理中&#xff0c;数据的准确性和及时性至关重要。本文将聚焦于一个具体的系统对接集成案例——钉钉数据集成到钉钉&#xff0c;详细探讨如何通过轻易云数据集成平台实现“鸿巢基础资料-供应…

Linux应用开发————mysql数据库

数据库概述 什么是数据库(database)? 数据库是一种数据管理的管理软件&#xff0c;它的作用是为了有效管理数据&#xff0c;形成一个尽可能无几余的数据集合&#xff0c;并能提供接口&#xff0c;方便用户使用。 数据库能用来干什么? 顾名思义&#xff0c;仓库就是用来保存东…