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

Java中常用算法之选择排序算法

一.选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是每次从未排序部分选择最小(或最大)的元素,并将其放到已排序部分的末尾。以下是用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;}}// 将找到的最小值与未排序部分的第一个元素交换int temp = array[minIndex];array[minIndex] = array[i];array[i] = temp;}}public static void main(String[] args) {int[] array = {64, 25, 12, 22, 11};System.out.println("Unsorted array:");printArray(array);selectionSort(array);System.out.println("Sorted array:");printArray(array);}private static void printArray(int[] array) {for (int value : array) {System.out.print(value + " ");}System.out.println();}
}

三.详细讲解

1. 初始化:

  • n是数组的长度。

2. 外层循环:

  • 遍历数组的每个元素,i表示当前已排序部分的末尾。
  • 假设当前元素array[i]是未排序部分的最小值,初始化minIndex为i。

3. 内层循环:

  • 从i+1开始遍历未排序部分,寻找最小值。
  • 如果找到比当前最小值array[minIndex]更小的元素,则更新minIndex。

4. 交换元素:

  • 将找到的最小值array[minIndex]与未排序部分的第一个元素array[i]交换。
  • 使用一个临时变量temp来交换两个元素的位置。

5. 打印数组:

  • printArray方法用于打印数组的内容。

总结

选择排序的时间复杂度为O(n²),因为在最坏情况下需要进行n²次比较。选择排序的优点是它的实现简单,并且在某些情况下(如内存写入次数较少时)可能比其他O(n²)排序算法更有效。然而,它的效率不如更复杂的排序算法(如快速排序、归并排序)高。选择排序适合用于小规模数据集或对稳定性要求不高的场合。

http://www.lryc.cn/news/504623.html

相关文章:

  • UNIX简史
  • React和Vue中暴露子组件的属性和方法给父组件用,并且控制子组件暴露的颗粒度的做法
  • uniapp 常用的指令语句
  • python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分
  • C# 结构体和类
  • D9741是一块脉宽调制方三用于也收路像机和笔记本电的等设备上的直流转换器。在便携式的仪器设备上。
  • 题目 1738: 排序
  • 爬虫逆向学习(十四):分享一下某数通用破解服务开发经验
  • 《Vue进阶教程》第十一课:响应式系统介绍
  • rpc设计的再次思考20251215(以xdb为核心构建游戏框架)
  • pydub AudioSegment增加音频文件音量并保存- python 实现
  • IT 新突破!远程控制电脑技术造就工作与学习新方向!
  • LabVIEW起落架震台检测
  • Day24 C++ 接口(抽象类)
  • UE5 关于画质、机能与开发成本的思考
  • IOS学习路线图
  • HICE-day6
  • 第100+33步 ChatGPT学习:时间序列EMD-ARIMA-LSTM模型
  • (C语言)双向链表
  • 青少年编程与数学 02-004 Go语言Web编程 04课题、接收和处理请求
  • Unity全局光照详解
  • 计算机网络知识点全梳理(三.TCP知识点总结)
  • ELK Stack 安装、配置以及集成到 Java 微服务中的使用
  • list_
  • 电机驱动,为什么不需要变速器?
  • how to write 述职pptx as a tech manager
  • 关于QMessageBox的一些使用总结和避坑指南
  • C语言预处理详解
  • 大语言模型画图(流程图、框架图)
  • 2024年API接口发展趋势:智能化、自动化引领潮流