笔记整理自 coderwhy 『TypeScript 高阶数据结构与算法』课程

概念

  • 本质:两两元素相比较,先扫描一遍未排序数列,把未排序的数列中的最小(大)元素,放到数列的已排序的末尾

特性

  • 选择排序是冒泡排序的优化版本,主要优化了交换的过程
  • 在所有完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种

复杂度分析

  • 时间复杂度:

    • 最好情况:O(n^2)
    • 最坏情况:O(n^2)
    • 平均情况:O(n^2)
  • 空间复杂度:O(1),原地排序

使用场景

时间复杂度较高为 O(n^2)

  • 适用于小数据量
  • 不适用于大数据量

具体代码


/**
- @desc : 选择排序实现
*/
function selectionSort(arr: number[]): number[] {
// 需扫描,则要使用到数组长度
const n = arr.length; // 数组中有多少个需要扫描的元素
// 为何 n - 1,因为前面的元素都扫描了,最后一个元素不需再扫描
for (let i = 0; i < n - 1; i++) {
// 获取最小值的索引,始终以已排序的末尾索引,作为 minIndex
let minIndex = i; // 每个元素需要扫描的次数
// 为何从 1 开始;因为 minIndex 从 0 开始的,索引 0 和 0 比较,即为自己和自己比较,无意义
// 为何 j = 1 + i;因为每扫描一次之后,已排序的末尾索引是跟随 i 变化的
for (let j = 1 + i; j < n; j++) {
// 找到更小的数据,则更新 minIndex
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
} // 当前位置已经是未排序数列中最小的数值,则不需交换,是个小优化点
if (i !== minIndex) {
[arr[minIndex], arr[i]] = [arr[i], arr[minIndex]];
}
} return arr;
} // 算法测试
let arr = [10, 90, 20, 100, 50];
console.log('排序前:', arr); // [ 10, 90, 20, 100, 50 ] let newArr = selectionSort(arr);
console.log('排序后:', newArr); // [ 10, 20, 50, 90, 100 ]

选择排序的基本实现【数据结构与算法—TypeScript 实现】的更多相关文章

  1. python 数据结构与算法之排序(冒泡,选择,插入)

    目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习 ...

  2. php 实现冒泡算法排序、快速排序、选择排序,插入排序

    许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一个初级phper,虽然很少接触到算法方面的东西 .但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要 ...

  3. 排序算法--选择排序(Selection Sort)_C#程序实现

    排序算法--选择排序(Selection Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来 ...

  4. 图解选择排序及算法优化(Java实现)

    选择排序 前言 原理:每次循环对比找出最小/大值,将最值的元素交换至左侧 思想:直接选择排序(Straight Select Sort)算法思想:第一趟从n个元素的数据序列中选出关键字最小/大的元素并 ...

  5. C#实现——十大排序算法之选择排序

    选择排序法 1.工作原理(算法思路) 给定一个待排序数组,找到数组中最小的那个元素 如果最小元素不是待排序数组的第一个元素,则将其和第一个元素互换 在剩下的元素中,重复1.2过程,直到排序完成. 2. ...

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

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

  7. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  8. C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序

    C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 ...

  9. 选择排序之javascript

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

  10. Java冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序

    冒泡排序   冒泡排序是一种简单的排序算法.它重复地走访过要排序地数列,一次比较两个元素,如果它们地顺序错误就把它们交换过来.走访数列地工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. ...

随机推荐

  1. 【Azure Redis 缓存】Azure Redis 异常 - 因线程池Busy而产生的Timeout异常问题

    问题描述 StackExchange.Redis在使用线程池后,偶尔会出现Timeout awaiting response 或者 No connection is available to serv ...

  2. 苏宁基于 AI 和图技术的智能监控体系的建设

    汤泳,苏宁科技集团智能监控与运维产研中心总监,中国商业联合会智库顾问,致力于海量数据分析.基于深度学习的时间序列分析与预测.自然语言处理和图神经网络的研究.在应用实践中,通过基于 AI 的方式不断完善 ...

  3. harbor 安装

    下载地址: https://github.com/goharbor/harbor/releases?page=1 下载了多个版本,发现仅v1.10.17版本支持GC清理,所以这里安装的v1.10.17 ...

  4. org.jetbrains.idea.maven - com.google.inject.CreationException: Unable to create injector, see the following errors-导入maven项目报错

    一.问题由来 最近准备更换Java开发工具,以前是使用Eclipse,现在准备换成号称Java开发神器的IntelliJ IDEA .在同事那里找到安装包后, 安装,导入需要的文件等等,一切都进行得很 ...

  5. java中webSocket发送图片文件数据非常慢

    一.问题由来 目前在开发的这个小程序中有一个功能需要和Unity客户端进行互动操作,互动的大致流程为在微信小程序中点击一个操作,发送一个HTTP请求, Java后台收到这个请求后,会给Unity客户端 ...

  6. win10 有 休眠 功能,将内存保存到文件,开机10秒左右,恢复之前idea等所有软件

    休眠 休眠 休眠 重要的事情说三遍. 提示,默认不显示,需要控制面板 电源里面设置下.

  7. 可穿戴心电ECG监测的技术路径及特点

    在传统的医疗设备中,监测心跳速率和心脏活动是经由测量电生理讯号与心电图 (ECG) 来完成的,需要将电极连接到身体来量测心脏组织中所引发电气活动的信号.常见的设备用医院的心电图机,长期监护的动态心电仪 ...

  8. 2024 SemEval 冠军

    SemEval Task10,本质是一个文本分类的任务,有三个子任务,论文摘要如下:在多维对话中,情绪不仅作为情感交流的重要中介者,还承载着丰富的信息.因此,准确识别交流者的情绪并理解情绪变化的触发因 ...

  9. 快速搭建Web安全测试环境

    快速搭建Web安全测试环境 1.虚拟机安装 2.网站搭建 一.虚拟机安装 下载VMware虚拟机,Windows 虚拟机 | Workstation Pro | VMware | CN 安装VMwar ...

  10. 喜讯!瑞云科技被授予“海上扬帆”5G融合应用专委会成员单位

    2022年7月19日,5G应用"海上扬帆"行动计划云启航大会暨"海上扬帆"融合应用专委会成立大会在沪成功举办. 受上海信通院工创中心邀请和信任,深圳市瑞云科技有 ...