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值较小时,所以选择排序比冒泡排序快;
  • 冒泡排序比选择排序实现简单。 如果待排序数据量小,并且对效率要求不高时,冒泡排序完全可以满足;

寄语

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

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

目录
相关文章
|
2月前
|
前端开发 JavaScript 算法
使用 JavaScript 数组方法实现排序与去重
【10月更文挑战第21天】通过灵活运用 `sort()` 方法和 `filter()` 方法,我们可以方便地实现数组的排序和去重。同时,深入理解排序和去重的原理,以及根据实际需求进行适当的优化,能够更好地应对不同的情况。可以通过实际的项目实践来进一步掌握这些技巧,并探索更多的应用可能性。
109 59
|
1月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
93 8
|
1月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
100 7
|
2月前
|
算法 搜索推荐 Java
数据结构与算法学习十三:基数排序,以空间换时间的稳定式排序,速度很快。
基数排序是一种稳定的排序算法,通过将数字按位数切割并分配到不同的桶中,以空间换时间的方式实现快速排序,但占用内存较大,不适合含有负数的数组。
36 0
数据结构与算法学习十三:基数排序,以空间换时间的稳定式排序,速度很快。
|
2月前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
24 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
2月前
|
搜索推荐 Java Go
深入了解选择排序算法
深入了解选择排序算法
27 4
|
2月前
|
算法
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
34 0
|
2月前
|
前端开发 JavaScript 索引
JavaScript 数组常用高阶函数总结,包括插入,删除,更新,反转,排序等,如map、splice等
JavaScript数组的常用高阶函数,包括遍历、插入、删除、更新、反转和排序等操作,如map、splice、push、pop、reverse等。
20 0
|
2月前
|
搜索推荐 算法
【排序算法(一)】——插入排序,选择排序 —> 深层解析
【排序算法(一)】——插入排序,选择排序 —> 深层解析
|
2月前
|
存储 算法 搜索推荐
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
79 0