前两天给大家分享了冒泡排序和插入排序(没关注的同学,可以关注后查看历史消息),今天继续给大家分享另一种常用的排序算法--选择排序

选择排序

选择排序和插入排序很相似,也区分已排序区间和未排序区间,选择排序是每次从未排序区间找到最小的元素放到已排序区间的末尾。

如下图:

代码示例

go示例:

func SelectionSort(nums []int, n int) {    if n <= 1 {        return    }    for i := 0; i < n; i++ {        min := i        for j := i + 1; j < n; j++ {            if nums[j] < nums[min] {                min = j            }        }        if min != i {            nums[i], nums[min] = nums[min], nums[i]        }    }}

PHP示例:

function SelectionSort($nums) {      if(count($nums) <= 1 ){            return $nums;      }      for ($i = 0; $i < count($nums);$i++) {            $min = $i;            for ($j = $i + 1; $j < count($nums); $j++) {                  if ($nums[$min] > $nums[$j]) {                        $min = $j;                  }            }            if ($min != $i) {                  $temp = $nums[$i];                  $nums[$i] = $nums[$min];                  $nums[$min] = $temp;            }      }      return $nums;}

JS示例:

const selectionSort = (arr) => {      if (arr.length <= 1) return      for (let i = 0; i < arr.length - 1; i++) {            let minIndex = i            for (let j = i + 1; j < arr.length; j++) {                  if (arr[j] < arr[minIndex]) {                        minIndex = j                  }            }            const temp = arr[i]            arr[i] = arr[minIndex]            arr[minIndex] = temp      }      console.log(arr)}

性能分析

最后我们看下插入排序的性能和稳定性:

  1. 时间复杂度:嵌套了两个循环,O(n2)
  2. 空间复杂度:不需要额外的存储空间,是原地排序算法
  3. 算法稳定性:每次都要找未排序区间的最小值并和前面的元素交换位置,涉及到位置交换,是不稳定的排序算法

介绍完了三种排序算法,时间复杂度都是O(n2),也都是原地排序,选择排序是不稳定的排序算法。插入排序和冒泡排序相比,插入排序需要一条语句,冒泡排序需要三个赋值语句,所以插入排序要优于冒泡排序。

但是在数据量大的时候这三个排序算法都不是很理想,接下来我会再分享两种时间复杂度为O(nlogn)的排序算法。

最后,关注下呗~

选择排序算法流程图_常用排序算法之选择排序相关推荐

  1. python枚举算法流程图_算法-枚举

    本章我们进入算法的学习,我们会通过比较经典的例题去讲解一些常用的算法思想,常用的算法思想包括:枚举.递归.分治.贪心.试探.动态迭代和模拟等,本节我们来学习一下枚举算法. 1. 枚举思想 枚举算法我们 ...

  2. 回归算法分类,常用回归算法解析

    回归算法分类,常用回归算法解析 回归是数学建模.分类和预测中最古老但功能非常强大的工具之一.回归在工程.物理学.生物学.金融.社会科学等各个领域都有应用,是数据科学家常用的基本工具. 回归通常是机器学 ...

  3. raptor五个数排序流程图_数据结构与算法(一):排序(上)

    做这个系列一是记录自己的学习过程,二是整合目前我所接触的比较好的资料,给出最直观,最通俗的算法解释 总体概况 十大排序算法:(比较排序):冒泡.选择.插入.归并.快速.希尔.堆排序 基数排序.桶排序. ...

  4. 中希尔排序例题代码_超全面分析十大排序算法

    点击上方"零一视界",选择"星标"公众号 资源干货,第一时间送达 作者 | 不该相遇在秋天 责编 | 程序员小吴 前言 本文全长 14237 字,配有 70 张 ...

  5. 扫描线填充算法代码_手写算法并记住它:计数排序

    对于经典算法,你是否也遇到这样的情形:学时觉得很清楚,可过阵子就忘了? 本系列文章就尝试解决这个问题. 研读那些排序算法,细品它们的名字,其实都很贴切. 比如计数排序,所谓"计数" ...

  6. 聚类算法的缺点_常用聚类算法

    一.K-Means 算法步骤: (1) 首先我们选择一些类/组,并随机初始化它们各自的中心点.中心点是与每个数据点向量长度相同的位置.这需要我们提前预知类的数量(即中心点的数量). (2) 计算每个数 ...

  7. dbscan算法中 参数的意义_常用聚类算法

    一.K-Means 算法步骤: (1) 首先我们选择一些类/组,并随机初始化它们各自的中心点.中心点是与每个数据点向量长度相同的位置.这需要我们提前预知类的数量(即中心点的数量). (2) 计算每个数 ...

  8. 递归算法 流程图_什么是算法?如何学习算法?算法入门

    转自:http://www.cnblogs.com/jiangwz/p/7765694.html 算法 什么是算法? 有一个很著名的公式 "程序=数据结构+算法". 曾经跟朋友吃饭 ...

  9. 递归算法 流程图_什么是算法?如何学习算法?算法入门的学习路径

    什么是算法? 有一个很著名的公式 "程序=数据结构+算法". 曾经跟朋友吃饭的时候我问他什么是算法,他说算法嘛,就是一套方法,需要的时候拿过来,套用就可以,我吐槽他,他说的是小学数 ...

最新文章

  1. grep及正则表达式
  2. 是时候抛弃web.xml了?
  3. Oracle 11gR2 使用 RMAN duplicate from active database 复制数据库
  4. 微信开发者工具:Failed to load font ************** net::ERR_CONNECTION_RESET问题解决办法
  5. 页面头部title、description、keywords标签的优化
  6. equalwith java_java中==与equal()方法的区别
  7. ubuntu server自动关闭屏幕背景灯_certbot-auto申请https证书,自动续期
  8. 广告/友情链接/站内信/会员地址/会员银行卡/我的收藏/评论/搜索/用户标签/用户抬头号/签到/我的足迹/我的优惠卷
  9. PDF文件如何旋转页面保存
  10. 如何打出日语中的叠字符号「々」
  11. BCM SIP ALG原理及实现(应用层实现机制)
  12. Python爬虫-爬取开心网主页(有登录界面-利用cookie)
  13. ansible:变量调用set_fact和register
  14. html静态页面作业——品牌红酒销售网页模板(4页) html网页设计期末大作业_网页设计平时作业
  15. 阅读心得:JDE:Towards Real-Time Multi-Object Tracking
  16. 苹果手机在升级系统时一直显示无服务器,苹果手机一直显示检测更新,怎么办?...
  17. DenseBox Unifying Landmark Localization with End to End Object Detection
  18. luckysheet+luckyexcel在线预览excel
  19. windows下查看python下安装的opencv版本
  20. 嵌入式消息队列artemis

热门文章

  1. Swift - 数组排序方法(附样例)
  2. 4.2-户部告急-百姓们太太太太太能生了2333
  3. 小白 LeetCode 242 有效的字母异位词
  4. 计算机操作系统——处理机调度算法
  5. filter导致跨域失效_【SpringMVC】与权限拦截器冲突导致的Cors跨域设置失效问题...
  6. loadrunner发送json_Loadrunner接口测试-发送JSON格式的请求
  7. android传感器博客,Android实现接近传感器
  8. html导航栏文字怎么平均,对齐HTML/CSS导航栏中的文本?
  9. data为long 怎么设置vue_vue基础之data
  10. vue aplayer 进度条无法拖动_Vue-rideo-player视频播放插件的使用