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

排序算法-选择排序

选择排序是一种简单直观的排序算法,其核心思想是每次从未排序的部分中选出最小(或最大)的元素,放到已排序部分的末尾

选择排序步骤

  1. 初始化:将序列分为已排序部分(初始为空)和未排序部分(初始为整个序列)。

  2. 查找最小值:遍历未排序部分,找到最小的元素。

  3. 交换位置:将最小元素与未排序部分的第一个元素交换,将其纳入已排序部分。

  4. 重复过程:重复上述步骤,直到未排序部分为空。

代码实现

package Sort;public class SelectionSort {public static void main(String[] args) {int[] res = getSelectionSort(new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48});for (int i = 0; i < res.length; i++) {System.out.print(res[i] + " ");}}//升序排列,查找最小值,如果降序排列,则查找最大值public static int[] getSelectionSort(int[] nums){int len = nums.length;for (int i = 0; i < len; i++) {int minIndex = i;//最小数的下标,每次循环开始总是假设第一个数最小for (int j = i+1; j < len; j++) {//每次循环,查找剩余的数的最小值if (nums[j] < nums[minIndex]){minIndex = j; //将最小数的小标保存}}//退出内循环,则说明找到剩余数的最小值//将当前数与最小值进行交换int temp = nums[minIndex];nums[minIndex] = nums[i];nums[i] = temp;}return nums;}
}

时间复杂度

  1. 最坏情况:无论输入是否有序,每次都需要完整遍历未排序部分。

    • 比较次数:(n-1) + (n-2) + ... + 1 = n(n-1)/2,即 O(n²)

    • 交换次数:每次遍历最多交换一次,共 n-1 次,即 O(n)

  2. 最好情况:即使序列已经有序,仍需完成所有比较,因此仍是 O(n²)

  3. 平均情况:时间复杂度为 O(n²)

空间复杂度

  • 选择排序是原地排序,仅需常数级额外空间(用于临时交换),因此空间复杂度为 O(1)

http://www.xdnf.cn/news/336259.html

相关文章:

  • 计算机网络常识:缓存、长短连接 网络初探、URL、客户端与服务端、域名操作 tcp 三次握手 四次挥手
  • v-model原理详解
  • Java 对象克隆(Object Cloning)详解
  • 【统计学基础】随机抽样的特点
  • Oracle OCP认证考试考点详解083系列13
  • Windows系统安装Cursor与远程调用本地模型QWQ32B实现AI辅助开发
  • 服务器托管的常见问题
  • Rspack:字节跳动自研 Web 构建工具-基于 Rust打造高性能前端工具链
  • C——VS的调试技巧
  • 图灵码上爬第5题:屠龙刀--爬虫逆向
  • 7系列 之 OSERDESE2
  • Pandas比MySQL快?
  • CentOS的防火墙工具(firewalld和iptables)的使用
  • Linux云计算训练营笔记day04(Rocky Linux中的命令)
  • 微信小程序备案的一些记录
  • Logback官方文档翻译章节目录
  • 【漫话机器学习系列】247.当 N=整个母体(WHEN N=POPULATION)
  • 【wpf】11 在WPF中实现父窗口蒙版效果:原理详解与进阶优化
  • 新能源汽车CAN通信深度解析:MCU、VCU、ECU协同工作原理
  • 云计算的基础概论
  • 深入解析建造者模式(Builder Pattern)——以Java实现复杂对象构建的艺术
  • Django之账号登录及权限管理
  • LeetCode算法题(Go语言实现)_61
  • MYSQL之索引结构,为何要用B+树
  • 浅谈 Shell 脚本编程中引号的妙用
  • C++复习类与对象基础
  • 软件逆向工程核心技术:脱壳原理与实战分析
  • 《企业级前端部署方案:Jenkins+MinIO+SSH+Gitee+Jenkinsfile自动化实践》
  • 通过混合机器学习和 TOPSIS 实现智能手机身份验证的稳健行为生物识别框架
  • 【FAQ】HarmonyOS SDK 闭源开放能力 — PDF Kit