十大经典排序算法
  • 十大经典排序算法-冒泡排序算法详解
  • 十大经典排序算法-选择排序算法详解
  • 十大经典排序算法-插入排序算法详解
  • 十大经典排序算法-希尔排序算法详解
  • 十大经典排序算法-快速排序算法详解
  • 十大经典排序算法-归并排序算法详解
  • 十大经典排序算法-堆排序算法详解
  • 十大经典排序算法-计数排序算法详解
  • 十大经典排序算法-桶排序算法详解
  • 十大经典排序算法-基数排序算法详解

一、什么是选择排序

1.概念

选择排序(Selection sort)是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止

2.算法原理

这是一个无序数列:1、5、4、2、6、3,我们要将它按从小到大排序。按照选择排序的思想,我们要找到最小的元素,将它移到队首

首先开始第一轮最小元素的比较

先假定最小元素为第一个元素:1

第一步:比较1和5,1比5小,最小元素为1

第二步:比较1和4,1比4小,最小元素为1

经过一轮比较后,找到1为最小的元素,将1与第一个元素交换(1已经是第一个元素,不需要再进行交换)

第二轮,从第二个元素5开始比较,发现2是最小的元素,5与2进行交换

第二轮结束后,如下所示

第三轮结束后,如下所示

第四轮结束后,如下所示

第五轮结束后,如下所示

至此所有的元素都是有序的

3.算法实现

function sort(arr) {let length = arr.length;for (let i = 0; i < length - 1; i++) {let minIndex = i;for (let j = i + 1; j < length; j++) {minIndex = arr[minIndex] > arr[j] ? j : minIndex;}if (i !== minIndex) {[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];}}
}let arr = [1, 5, 4, 2, 6, 3];
sort(arr);
console.log(arr);

二、选择排序算法特点

1.时间复杂度

选择排序算法的每一轮要遍历所有元素,共遍历n-1轮,所以时间复杂度是O(N^2)

2.空间复杂度

选择排序算法排序过程中需要一个临时变量存储最小元素(最大元素),所需要的额外空间为1,因此空间复杂度为O(1)

3.稳定性

选择排序算法是一种不稳定排序算法,当出现相同元素的时候有可能会改变相同元素的顺序

上图例子中,绿色2在紫色2之前,但经过选择排序之后,绿色2在紫色2之后,所以选择排序是一种不稳定排序算法

十大经典排序算法-选择排序算法详解相关推荐

  1. 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...

  2. 【GIF动画+完整可运行源代码】C++实现 选择排序——十大经典排序算法之二

    十大经典排序算法系列博客-->传送门 选择排序是一种简单直观的排序算法,首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的 ...

  3. 十大经典排序算法详解(一)冒泡排序,选择排序,插入排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 目录 1.算法的评判标准 2.排序算法的分类 3.十大经典排序算法-冒泡排序,选择排序,插入排序 ...

  4. 十大经典排序算法(图解与代码)——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序(Python and Java)

    排序 重新排列表中的元素,使表中的元素按照关键字递增或者递减 内部排序: 指在排序期间,元素全部存放在内存中的排序 外部排序: 指在排序期间元素无法全部同时存放在内存中,必须在排序的过程中根据要求不断 ...

  5. 十大经典排序算法动画与解析,看我就够了

    作者 | 程序员小吴 转载自五分钟学算法(ID: CXYxiaowu) 排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序.内部排序是数据记录在内存中进行 ...

  6. 十大经典排序算法(建议收藏)

    来自:Damonare的个人博客 原文:http://blog.damonare.cn/2016/12/20/十大经典排序算法总结(javascript描述)/ 0.算法概述  0.1 算法分类 十种 ...

  7. 数据结构与算法笔记 —— 十大经典排序及算法的稳定性

    一.十大经典排序算法 排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全 ...

  8. python经典排序_python实现十大经典排序算法

    写在前面 本文参考十大经典排序算法(动图演示),这篇文章有动图显示,介绍的很详细.本文是部分内容有借鉴此博客,用python实现,有一些改进. 各种算法的时间.空间复杂度 1.冒泡排序 1.比较相邻的 ...

  9. 【Python】用Python实现十大经典排序算法

    来源:Python数据之道 (ID:PyDataLab) 作者:阳哥 大家好,我是阳哥. 最近一段时间,我在微信视频号「Python数据之道」上陆陆续续发布了10种经典排序算法的动画实现. 今天,想以 ...

最新文章

  1. 小米手机qq不读取相册照片_小米手机越用越卡怎么办?
  2. 出席全球数字经济大会 第四范式助力打造中国数字经济“北京样板”
  3. 《大型网站技术架构》5、6、7章阅读笔记
  4. 构造方法的调用顺序和成员变量的初始化时机以及动态绑定
  5. c语言函数声明定义参数命名,C语言函数声明与定义
  6. php截取字符串,带中文,多余的省略号代替
  7. 谈新手对CString的使用
  8. 小米首部5G手机正式发布 海外营收将很快超过国内
  9. 微软职位内部推荐-UX Designer II
  10. Linux进程间通信IPC学习笔记之同步一(线程、互斥锁和条件变量)
  11. LSTM+attention代码原理详解
  12. 架构与设计的流程和核心概念笔记:三、业务层设计
  13. mob AndroidStudio 短信SDK集成
  14. 【实用工具系列】MathCAD入门安装及快速上手使用教程
  15. Hexo主题next中添加天气插件(心知天气)
  16. 百度的注册页面(css+div实现)
  17. 一次性餐具 disposable dishware
  18. 联想ideapad 330c 15Ikb换内存条注意!!!!!只有一个插槽
  19. Opencv:图像旋转,cv2.getRotationMatrix2D 和 cv2.warpAffine 函数
  20. [1996 TRO] Probabilistic Roadmaps for Path Planning in High-Dimensional Configuration Spaces

热门文章

  1. 个人知识管理工具试用感想
  2. javascript中的Reflect对象是什么?如何使用Reflect?
  3. springboot根据id查看详情页功能(就是用id获取全部数据)
  4. 5G网络架构(全面)2020-11-23
  5. 金蝶K3物料属性修改转换问题
  6. eclipse java 插件开发_Eclipse插件开发之基础篇(2) 第一个Eclipse插件
  7. Java jinfo 命令详解
  8. 儿知错父之过下一句_“子不孝父之过”下一句是什么?
  9. 【Go】FLV文件解析(三)
  10. php mysql三_PHP和MySQL基础教程(三)_MySQL