javascript算法排序之选择排序

简介: javascript算法排序之选择排序

前言

经典的排序算法,很多人都听过,很多人也许用过,但是也有很多人,听过没见过。为什么呢?现在我们有了越来越多的框架、依赖包,我们将能用到排序的实际场景,作为业务将其封装成了函数,所以,一些人只知函数而不知其运行逻辑。

基于以上,为了让自己更好的理解函数运行逻辑,整理了一些基本排序的方法的运行规则,以及部分个人理解,希望能给大家一些帮助。

本文将讲述选择排序,及选择排序和冒泡排序的区别!
因为很多人仔细回想时,无法准确说明选择排序和冒泡排序的区别,甚至认为他们是同一个!

选择排序

选择排序(Selection sort)是一种简单直观的排序算法。顾名思义,选择排序的核心要点在于选择,选择数组中的最大值或最小值!,然后按逻辑放到指定位置。

选择排序实现原理

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

代码


function selectionSort(array) {
    //外循环控制次数
    for (var i = 0; i < array.length; i++) {
        //假定最小值用于比较
        var min = array[i];
        //j=i+1使其从剩余元素中进行筛查
        for (var j = i + 1; j <= array.length; j++) {
            //从剩余数字中寻找最小值
            if (min > array[j]) {
                //更新最小值
                min = array[j];
                //交换a[j]和a[i]
                var item = array[j];
                array[j] = array[i];
                array[i] = item;
            }
        }

    }
    console.log("selectionSort result:", array);
}

selectionSort([4, 5, 1, 3, 2]);

输出值:

复杂度

选择排序的时间复杂度,
时间复杂度:O(n^2);
空间复杂度:O(n);

选择排序和冒泡排序比较

区别:

  • 冒泡排序:两两比较,即时交换。
  • 选择法排序:先找最值,一次交换。

优劣:

  • 选择排序比冒泡排序速率快。 选择排序元素交换次数为O(n),冒泡排序元素交换次数为O(n^2),由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,所以选择排序比冒泡排序快;
  • 冒泡排序比选择排序实现简单。 如果待排序数据量小,并且对效率要求不高时,冒泡排序完全可以满足;

寄语

看似选择排序和冒泡排序实现逻辑相同,且均能实现排序功能,但是实则在运算速率上不可同日而语,这就是基础算法的魅力。

圆越大,不可预知的可能越多!

目录
相关文章
|
1月前
|
存储 监控 算法
局域网监控其他电脑的设备信息管理 Node.js 跳表算法
跳表通过分层索引实现O(logn)的高效查询、插入与删除,适配局域网监控中设备动态接入、IP映射及范围筛选等需求,相比传统结构更高效稳定,适用于Node.js环境下的实时设备管理。
110 9
|
2月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
191 5
|
2月前
|
机器学习/深度学习 运维 算法
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
246 0
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
|
3月前
|
机器学习/深度学习 算法 安全
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
215 1
|
2月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
152 0
|
2月前
|
机器学习/深度学习 算法 安全
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
107 0
|
1月前
|
存储 监控 JavaScript
企业上网监控系统的恶意 URL 过滤 Node.js 布隆过滤器算法
布隆过滤器以低内存、高效率特性,解决企业上网监控系统对百万级恶意URL实时检测与动态更新的难题,通过概率性判断实现毫秒级过滤,内存占用降低96%,适配大规模场景需求。
222 3
|
1月前
|
存储 监控 算法
电脑管控软件的进程优先级调度:Node.js 红黑树算法
红黑树凭借O(log n)高效插入、删除与查询特性,适配电脑管控软件对进程优先级动态调度的高并发需求。其自平衡机制保障系统稳定,低内存占用满足轻量化部署,显著优于传统数组或链表方案,是实现关键进程资源优先分配的理想选择。
131 1
|
2月前
|
存储 算法 搜索推荐
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
专攻软考高频算法,深度解析二分查找、堆排序、快速排序核心技巧,对比九大排序算法,配套动画与真题,7天掌握45%分值模块。
162 1
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
|
2月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
232 3

热门文章

最新文章