一、说在前面

一直想写一些简单易懂的文章,因为平时看的很多的书籍或者文章都是看着很难受的感觉,当然,这并不是说书籍写的不好,只是说对于一些没有太多基础或者基础不是很好的来说,相对来说还是比较难以理解的。

这个系列主要是写一些简单易懂的数据结构与算法的文章,同时也是帮助自己再理解理解这方面的知识。

作为数据结构与算法的开篇,还是以排序算法作为第一部分的内容,需要注意的是,这一系列的文章并不是涉及到很多理论性质的知识,因为前面说了,主要还是希望文章是简单易懂的,希望能达到读故事的感觉。如果需要去学习理论性质的知识,可以去查看相关的数据结构与算法的书籍。

二、选择排序算法

今天早上,老师又叫我们去操场上做早操,做早操之前呢,今天也需要排队,到操场的同学有5个人,今天的排序方法还是按照身高由低到高排列

图片.png

但是,今天老师说换一种方法排队,我来给你们排队,昨天你们排队太慢了。

于是,老师说:第一个同学站在原地不要动。

图片.png

然后,我从后面4个同学当中挑一个最矮的同学,这个同学站在第一个同学后面,你们两个站在原地不要动。

图片.png

图片.png

之后,老师再从后面3个同学里面挑一个最矮的同学,然后让他站在前面两个排好的同学后面,这样这三个同学就排好了,你们站着不要动。

图片.png

图片.png

老师又从最后两个同学中挑一个最矮的同学,让他站在前面三个已经排好的队伍后面,这样,这四个同学就排好队列,这四个同学站着不要动。

图片.png

四个同学排好了,只有最后一个同学了,然后,这个同学自己站到前面四个已经排好队的队伍的最后,这样5个同学的位置就排好了。

图片.png

图片.png

老师看到排好了队,非常开心,对同学们说:“我排队是不是比你们自己排队快啊!”

然后,这位程序员老师说,哪位同学懂了刚刚我给你们排队的思想,能不能叙述一下,这时候,小明说:我会!,于是,小明说了一下思想

初始时在队伍中找到最小(大)元素,放到队伍的起始位置作为已排好队伍;然后,再从剩余未排序队伍中继续寻找最小(大)元素,放到已排序队伍的末尾。以此类推,直到所有元素均排序完毕。

老师说,队列都给你们排好了,小明同学也又很好的阐述了思想,你们把代码实现以下吧(哈哈哈!)。

于是,小海同学就去按照老师的排队方法,实现了选择排序算法

public static void selectionSort(int[] arr) {if (arr == null || arr.length < 2) {return;}for (int i = 0; i < arr.length - 1; i++) {int minIndex = i;for (int j = i + 1; j < arr.length; j++) {//在待排序区选择最小的元素minIndex = arr[j] < arr[minIndex] ? j : minIndex;}swap(arr, i, minIndex);// 放到已排序序列的末尾,该操作很有可能把稳定性打乱,所以选择排序是不稳定的排序算法}}public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}
性能分析

最差时间复杂度:O(n^2)
最优时间复杂度:O(n^2)
平均时间复杂度: O(n^2)
所需辅助空间:O(1)
稳定性:不稳定

置顶或星标公众号,第一时间接收小海热文

方法如下

选择排序算法,只需这篇文章就够了相关推荐

  1. 超强汇总:学习Python列表,只需这篇文章就够了

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 ID: 豌豆下的猫  公众号: Python猫 千里之行,始于足下 ...

  2. python基础系列之学习Python列表,只需这篇文章就够了

    千里之行,始于足下.要练成一双洞悉一切的眼睛,还是得先把基本功扎扎实实地学好.今天,本喵带大家仔细温习一下Python的列表.温故而知新,不亦说乎. 当然,温习的同时也要发散思考,因为有些看似无关紧要 ...

  3. 这或许是东半球分析十大排序算法最好的一篇文章

    作者 | 不该相遇在秋天 转载自五分钟学算法(ID:CXYxiaowu) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强 ...

  4. 中希尔排序例题代码_【数据结构与算法】这或许是东半球分析十大排序算法最好的一篇文章...

    码农有道 历史文章目录(请戳我) 关于码农有道(请戳我) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强烈建议先收藏然后 ...

  5. 【数据结构与算法】这或许是东半球分析十大排序算法最好的一篇文章

    原地址:https://mp.weixin.qq.com/s?__biz=MzIwNTc4NTEwOQ==&mid=2247486981&idx=1&sn=c63cd080be ...

  6. 这或许是东半球讲十大排序算法最好的一篇文章

    作者 | 不该相遇在秋天 责编 | 程序员小吴 ## 冒泡排序 冒泡排序无疑是最为出名的排序算法之一,从序列的一端开始往另一端冒泡(你可以从左往右冒泡,也可以从右往左冒泡,看心情),依次比较相邻的两个 ...

  7. 理解(计算、网络,存储)虚拟化,只需一篇文章

    计算虚拟化 1.什么是 虚拟化 什么是虚拟化:虚拟化是一种技术,将物理设备进行逻辑化,转化成文件夹或文件,实现软硬件解耦 好处: 提高资源利用率 软硬件解耦(具备其他高级特性:HA,DRS,DPM) ...

  8. golang实现大顶堆只看这篇文章就够了

    文章目录 前言 正文 golang实现堆的代码 堆排序 总结 前言 通过本篇文章,你将学会: 初始化大顶堆 弹出堆顶元素 往堆中插入元素 堆排序 学习的前提是你已经知道在构建好的堆中调整单个元素的原理 ...

  9. 只需这篇文章java线程池原理便懂了!♥♥

    模拟Java线程池运行原理 在了解线程池之前,我们先来谈谈线程的状态转换 线程常用方法及种类 线程池实现原理和线程池概念 四种线程池 线程池的组成 代码 自定义线程池功能简单 在了解线程池之前,我们先 ...

最新文章

  1. 资源2010-01-29
  2. php隐藏webshell_【web端权限维持】利用ADS隐藏webshell
  3. 软件工程——理论、方法与实践 第一章
  4. 为什么使用NativeJdbcExtractor
  5. java 历届试题 合根植物
  6. NMEA0183标准语句
  7. abb机器人离线编程软件叫做_Robotstudio软件:ABB机器人机器视觉位姿引导虚拟仿真...
  8. 显示器U2518怎么连服务器,工作游戏两不误,戴尔 U2518D显示器太划算-双显示器设置...
  9. java电子通讯录毕业设计_JAVA电子通讯录(带系统托盘)009
  10. 数据结构——二叉树错题集
  11. java ppt控件_Java版PPT操作控件Spire.Presentation v2.12.2新版来袭!支持获取具有超链接的目标幻灯片...
  12. CSharp学习笔记
  13. 傅里叶级数及傅里叶变换
  14. 协同数据交换平台详细设计方案(word)
  15. 【系统分析师之路】2018年上系统分析师综合知识真题
  16. AndroidWear官方文档总结03 - 连接手持设备与穿戴设备模拟器到开发环境
  17. 搭建简易的物联网服务端和客户端-Maibu控制(二十一)
  18. 新型场板提高阻断电压
  19. 【网络协议趣谈】HTTPS协议加密证书和工作模式
  20. android 发送语音功能和ios交互格式aac

热门文章

  1. [转贴]ASP优化之显示数据查询内容
  2. STM32F103的11个定时器详解
  3. 操作系统习题2—进程调度
  4. HTML设置虚拟按键,畅玩安卓模拟器的设置虚拟按键的方法
  5. 初玩树莓派所遇见的坑
  6. Kubernetes构建过程分析
  7. [转]一篇很喜欢的知乎美文
  8. WebsocketWebSSH
  9. ETHREAD 结构体属性介绍
  10. SQL语法之基础查询(进阶1)and条件查询(进阶2)