前言

作为一名程序员数组的排序算法是必须要掌握的,今天来图解----选择排序

选择排序原理

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序原理图(未优化)

绿色为当前比对的两个对象,然后进行交换

这个是我自己使用生成器写的一个小demo,有些简陋,下面是这个demo的项目地址(vue版)

项目地址:array_sort.

这个项目也可以用原生js + 定时器写,有时间的话我会出一个原生版本,到时候会更新,我为了方便所以用vue写的

选择排序代码(未优化)

const arr = [];
for(let i = 0; i < 10; i ++) {
arr.push(Math.floor(Math.random() * 100 + 10));
}
console.time('s')
console.log("排序前:",arr);
for(let i = 0; i < arr.length; i ++) {
for(let j = i; j < arr.length - 1; j ++) {
if(arr[i] < arr[j+1]) {
[arr[i],arr[j+1]] = [arr[j+1],arr[i]]; // 使用数组结构进行值的交互
}
}
}
console.log("排序后:",arr);
console.timeEnd('s')

输出结果是:

排序前: (10) [50, 70, 65, 54, 17, 31, 22, 38, 81, 35]

排序后: (10) [81, 70, 65, 54, 50, 38, 35, 31, 22, 17]

s: 0.353271484375 ms

优化版本动图

这个是先用index 记录最大的值,最后再插入到第一位,不必每次进行交互操作

优化代码

const arr = [];
for(let i = 0; i < 10; i ++) {
arr.push(Math.floor(Math.random() * 100 + 10));
}
console.time('s');
console.log("排序前:",arr);
let index = 0;
for(let i = 0; i < arr.length; i ++) {
index = i;
for(let j = i + 1; j < arr.length; j ++) {
if(arr[index] < arr[j]) {
index = j; // 使用数组结构进行值的交互
}
}
if(i !== index) {
[arr[i],arr[index]] = [arr[index],arr[i]]; // 数组解构赋值
}
}
console.log("排序后:",arr);
console.timeEnd('s');

输出结果

排序前: (10) [29, 25, 29, 43, 47, 93, 41, 34, 60, 106]

排序后: (10) [106, 93, 60, 47, 43, 41, 34, 29, 29, 25]

s: 0.339111328125 ms

你会发现优化版本比未优化版本快了0.02秒左右,当然这只是10条数据,这个数据并不严谨因为我的每一次运行的数据都不一样,但是选择排序是比较稳定的排序

项目链接

项目链接:array_sort.

javascript数组排序算法之选择排序的更多相关文章

  1. Java中的经典算法之选择排序(SelectionSort)

    Java中的经典算法之选择排序(SelectionSort) 神话丿小王子的博客主页 a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟 ...

  2. java结构与算法之选择排序

    一 .java结构与算法之选择排序(冒择路兮快归堆) 什么事选择排序:从一组无序数据中选择出中小的的值,将该值与无序区的最左边的的值进行交换. 简单的解释:假设有这样一组数据 12,4,23,5,找到 ...

  3. 【DS】排序算法之选择排序(Selection Sort)

    一.算法思想 选择排序是一种简单直观的排序算法.它的工作原理如下: 1)将序列分成两部分,前半部分是已经排序的序列,后半部分是未排序的序列: 2)在未排序序列中找到最小(大)元素,放到已排序序列的末尾 ...

  4. Python排序算法之选择排序定义与用法示例

    Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...

  5. Java实现 蓝桥杯VIP 算法提高 选择排序

    算法提高 选择排序 时间限制:1.0s 内存限制:256.0MB  选择排序 问题描述 排序,顾名思义,是将若干个元素按其大小关系排出一个顺序.形式化描述如下:有n个元素a[1],a[2],-,a[ ...

  6. 八大排序算法~简单选择排序【记录下标k变量的作用】

    八大排序算法~简单选择排序[记录下标k变量的作用] 1,思想:打擂台法,数组中的前n-1个元素依次上擂台"装嫩",后边的元素一个挨着一个不服,一个一个上去换掉它 2,优化:通过记录 ...

  7. JavaScript ,Python,java,Go系列算法之选择排序

    常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等. 用一张图概括:   选择排序 选择排序是一种简单直观的排序算法,无论什么数据进去都是O(n2) ...

  8. 排序算法总结------选择排序 ---javascript描述

    每当面试时避不可少谈论的话题是排序算法,上次面试时被问到写排序算法,然后脑袋一懵不会写,狠狠的被面试官鄙视了一番,问我是不是第一次参加面试,怎么可以连排序算法都不会呢?不过当时确实是第一次去面试,以此 ...

  9. 【算法】选择排序(Selection Sort)(二)

    选择排序(Selection Sort) 选择排序(Selection-sort)是一种简单直观的排序算法.它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余 ...

随机推荐

  1. .Net之Docker部署详细流程

    开篇语 自己从头开始走一遍docker部署.net的流程,作为一种学习总结,以及后续会写一些在该基础之上的文章. 本次示例环境:vs2019.net5.docker.postman 创建项目 本次事例 ...

  2. hdu5062 简单题

    题意:       求区间逆序数的个数,逆序数增加了个要求就是必须要是先升序在降序例如12321或者123321这样的. 思路:        水题直接写就行了,数据范围不大,估计直接求也不会超时,我 ...

  3. POJ1151基本的扫描线求面积

    题意:      给定n个矩形的对角坐标,分别是左下和右上,浮点型,求矩形覆盖的面积. 思路:       基本的线段树扫描线求面积,没有坑点,不解释了,提示一点,有的题尤其是线段树扫描线的题需要离散 ...

  4. POJ3498最大流,枚举终点,企鹅,基础最大流

    题意:       有一n个冰块,每个冰块上都有一些企鹅,所有的企鹅要跳到一个冰块上去,但是由于起跳是的后坐力原因导致每个冰块最多条mi次,最后问你所有的企鹅都跳到一个冰块上去的那块冰块可以是哪一块, ...

  5. LA3942字典树+递推

    题意:      给你一个字典,最多4000个单词,每个单词长度最多是100,然后给你一个串,问你这个子串可以被那些单词组合的组合数,比如字典里有4个单词a b ab cd,然后给你一个串abcd则a ...

  6. CMS Joomla SQL注入漏洞练习(CVE-2017-8917 )

    0x01 原理 1.Joomla是内容管理的网站程序,也就是CMS.漏洞原理是com_fields组件,对请求数据过滤不严谨,从而导致sql注入.这个就是有问题的代码,可以看出sql根本没有过滤,通过 ...

  7. 【axios】get/post请求params/data传参总结

    axios中get/post请求方式 1. 前言 最近突然发现post请求可以使用params方式传值,然后想总结一下其中的用法. 2.1 分类 get请求中没有data传值方式 2.2 get请求 ...

  8. 【转】浅谈自动特征构造工具Featuretools

    转自https://www.cnblogs.com/dogecheng/p/12659605.html 简介 特征工程在机器学习中具有重要意义,但是通过手动创造特征是一个缓慢且艰巨的过程.Python ...

  9. aspnetcore 应用 接入Keycloak快速上手指南

    登录及身份认证是现代web应用最基本的功能之一,对于企业内部的系统,多个系统往往希望有一套SSO服务对企业用户的登录及身份认证进行统一的管理,提升用户同时使用多个系统的体验,Keycloak正是为此种 ...

  10. SimpleDateFormat线程不安全的5种解决方案!

    1.什么是线程不安全? 线程不安全也叫非线程安全,是指多线程执行中,程序的执行结果和预期的结果不符的情况就叫做线程不安全. ​ 线程不安全的代码 SimpleDateFormat 就是一个典型的线程不 ...