前言

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

选择排序原理

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

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

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

这个是我自己使用生成器写的一个小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. Servlet与Netty横向对比

    为什么要把这两个看起来不是很搭的东西放在一起对比呢?首先它们两个都是网络编程框架和规范,而且通过我的观察,从API的设计.生命周期方法.处理流程等等方面,他们确实有太多相似的地方了,如果想要深入地学习 ...

  2. 硬件篇-03-SLAM移动底盘电气设计

      最近因为在忙毕设,专栏已经1个多月没更,对于托更我很抱歉.不过这几周真的没什么时间,Rick&Morty的最新集我到现在都还没看哈哈.     现在毕设已经搞得差不多了,水专栏文章的快乐生 ...

  3. Thinkphp5助手函数和Thinkphp3的单字母函数对应参照表

  4. AliCrackme_2题的分析

    作者:Fly2015 AliCrackme_2.apk运行起来的注册界面,如图. 首先使用Android反编译利器Jeb对AliCrackme_2.apk的Java层代码进行分析. 很幸运,就找到了该 ...

  5. hdu2846 字典树(带id的)

    题意:      给你一些模式串,然后给你一些提问,每个提问是给你一个串,问你这个串在上 面的模式串中出现的次数. 思路:       一开始想到hash,但是因为用的是map,所以超时了,map的操 ...

  6. Android so注入( inject)和Hook(挂钩)的实现思路讨论

    本文博客:http://blog.csdn.net/qq1084283172/article/details/54095995 前面的博客中分析一些Android的so注入和Hook目标函数的代码,它 ...

  7. adbi学习:java hook实现机制

    adbi的java hook实现代码ddi不在之前下载的文件中,下载地址:https://github.com/crmulliner/ddi,具体的编译看readme里面很详细的介绍了.注意ddi代码 ...

  8. 每天一道面试题LeetCode 206 -- 反转链表

    LeetCode206 反转链表 思路 代码 # # @lc app=leetcode.cn id=206 lang=python3 # # [206] 反转链表 # # https://leetco ...

  9. 【点分治】2019 首尔 icpc Gene Tree

    题目 链接:https://ac.nowcoder.com/acm/contest/15644/B来源:牛客网 A gene tree is a tree showing the evolution ...

  10. 【】POST、GET、RequestParam、ReqestBody、FormData、request payLoad简单认知

    背景: 使用vue+axios方式代替ajax后向后台发送数据出现问题了,controller获取不到数据.然后查.找.查.找中似乎找到一些门道.以下列出总结性的东西来记录自己的思考成果,仅供参考,不 ...