十大经典排序算法-选择排序算法详解

十大经典排序算法

一、什么是选择排序

1.概念

选择排序(Selection sort)是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止

2.算法原理

这是一个无序数列:1、5、4、2、6、3,我们要将它按从小到大排序。按照选择排序的思想,我们要找到最小的元素,将它移到队首
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lil6BXDb-1590992664454)(./冒泡1.png)]
首先开始第一轮最小元素的比较

先假定最小元素为第一个元素:1

第一步:比较1和5,1比5小,最小元素为1

第二步:比较1和4,1比4小,最小元素为1

经过一轮比较后,找到1为最小的元素,将1与第一个元素交换(1已经是第一个元素,不需要再进行交换)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-48KJ2dAC-1590992664457)(./选择1.png)]
第二轮,从第二个元素5开始比较,发现2是最小的元素,5与2进行交换
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7dwkIuVf-1590992664458)(./选择2.png)]
第二轮结束后,如下所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lclTrB85-1590992664461)(./选择3.png)]
第三轮结束后,如下所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GSyWgx2n-1590992664463)(./选择4.png)]
第四轮结束后,如下所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DTVg5QkP-1590992664464)(./选择5.png)]
第五轮结束后,如下所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SJTdYzAZ-1590992664465)(./选择6.png)]
至此所有的元素都是有序的

3.算法实现
function sort(arr) {
    let length = arr.length;
    for (let i = 0; i < length - 1; i++) {
        let minIndex = i;
        for (let j = i + 1; j < length; j++) {
            minIndex = arr[minIndex] > arr[j] ? j : minIndex;
        }
        if (i !== minIndex) {
            [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
        }
    }
}

let arr = [1, 5, 4, 2, 6, 3];
sort(arr);
console.log(arr);

二、选择排序算法特点

1.时间复杂度

选择排序算法的每一轮要遍历所有元素,共遍历n-1轮,所以时间复杂度是O(N^2)

2.空间复杂度

选择排序算法排序过程中需要一个临时变量存储最小元素(最大元素),所需要的额外空间为1,因此空间复杂度为O(1)

3.稳定性

选择排序算法是一种不稳定排序算法,当出现相同元素的时候有可能会改变相同元素的顺序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KPtbeGfi-1590992664466)(./选择7.png)]
上图例子中,绿色2在紫色2之前,但经过选择排序之后,绿色2在紫色2之后,所以选择排序是一种不稳定排序算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值