首页 > 编程语言 >插入排序的基本实现【数据结构与算法—TypeScript 实现】

插入排序的基本实现【数据结构与算法—TypeScript 实现】

时间:2024-04-09 11:47:49浏览次数:30  
标签:arr TypeScript 数列 插入排序 newData 数据结构 let 排序 复杂度

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

概念

本质:将数列分为已排序和未排序,将未排序中的元素插入到已排序中的合适位置

特性

复杂度分析

  • 时间复杂度:
    • 最好情况:O(n),有序序列
    • 最坏情况:O(n^2),倒序序列
    • 平均情况:O(n^2),随机数列
  • 空间复杂度:O(n),原地排序

使用场景

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

  • 适合小数据量的数列
  • 适合有很多已排序好的数列
  • 不适合大数据量的数列

具体代码


/**
 - @desc  : 插入排序
 */
function insertionSort(arr: number[]): number[] {
  // 扫描数组,需知数组长度
  const n = arr.length;

  // 外层遍历,未排序数组的个数
  // 为何从 i 从 1 开始;因为以 i = 0 为初始排序元素,从左至右按升序排列
  for (let i = 1; i < n; i++) {
    // 获取未排序元素作为新数据
    let newData = arr[i];

    // 与新数据的前一个数据比较
    let j = i - 1;

    // 只要前一个数据比新数据大,则需要继续遍历
    // j 为 0,则已找到最前面的位置
    while (arr[j] > newData && j >= 0) {
      arr[j + 1] = arr[j];

      // 每遍历一次,则往前移动
      j--;
    }

    // arr[j] > newData,则更新下一个索引的数据
    // 如果新数据已经在正确的位置则不需更新,小优化点
    // 记录一下:这个小优化点是我自己想到的,自己还是有进步,加油!
    if (j + 1 !== i) {
      arr[j + 1] = newData;
    }
  }

  return arr;
}

// 算法测试
let arr = [10, 90, 20, 100, 50];
console.log('排序前:', arr); // [ 10, 90, 20, 100, 50 ]

let newArr = insertionSort(arr);
console.log('排序后:', newArr); // [ 10, 20, 50, 90, 100 ]

标签:arr,TypeScript,数列,插入排序,newData,数据结构,let,排序,复杂度
From: https://www.cnblogs.com/itchaox/p/18123598

相关文章

  • 选择排序的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程概念本质:两两元素相比较,先扫描一遍未排序数列,把未排序的数列中的最小(大)元素,放到数列的已排序的末尾特性选择排序是冒泡排序的优化版本,主要优化了交换的过程在所有完全依靠交换去移动元素的排序方法中,选择排......
  • 2024.4.8 数据结构课件补题
    [AGC055B]ABCSupremacy令ABC分别为1,2,3,然后令\(s_i=(s_i-i)\textmod3\)且结果大于0。然后可以发现三种组合均为连贯的三个相同数。且可以自由移动。可以选择每遇到三个相同数就删掉,或者不断加入栈,如果栈顶三个数相同全部弹出。再比较剩下的数即可。#include<bits......
  • Day5.一刷数据结构算法(C语言版) 242有效的字母异位词; 349两个数组的交集; 202快乐数; 1
        现在我们开始学习哈希表.        经过本次学习我认识到c++的便利,但是我使用的是c,那些功能c又用不了,导致代码长度一下子拉长了...        一刷的时候我还是先用c吧,等二刷的时候试试c++.        进入正题:        什么时候......
  • 深入理解数据结构——栈
    前言:在学习完数据结构顺序表和链表之后,其实我们就可以做很多事情了,后面的栈和队列,其实就是对前面的顺序表和链表的灵活运用,今天我们就来学习一下栈的原理和应用。准备工作:本人习惯将文件放在test.c、SeqList.c、SeqList.h三个文件中来实现,其中test.c用来放主函数,SeqList.c......
  • 【数据结构与算法】:堆排序和选择排序
    1.堆排序堆排序是一种比较复杂的排序算法,因为它的流程比较多,理解起来不会像冒泡排序和选择排序那样直观。1.1堆的结构要理解堆排序,首先要理解堆。堆的逻辑结构是一棵完全二叉树,物理结构是一个数组。(如果不知道什么是二叉树,请前往我的主页查看)。所以堆是一个用数组表......
  • 突破编程_C++_网络编程(Windows 套接字(常用数据结构))
    1WSADATAWSADATA结构体包含了关于Winsock实现的一些详细信息,定义如下:structWSAData{WORDwVersion;//Winsock版本号WORDwHighVersion;//Winsock动态库支持的最高版本号charszDescription[WSADESCRIPTION_LEN+1];//Winsock描......
  • typescript学习文档(二)
    1、安装typescript全局安装:npminstall-gtypescript检查是否安装成功(出现版本号表示安装成功):tsc-v如果使用tsc指令出现如下错误:解决办法:以管理员的身份运行vscode终端执行:get-ExecutionPolicy,结果:Restricted终端执行:set-ExecutionPolicyRemoteSigned终端执行:get......
  • MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
    数据结构我们知道MySQL的存储引擎Innodb默认底层是使用B+树的变种来存储数据的下面我们来复习一下B树存储+B树存储 +哈希存储的区别哈希存储,只能使用等值查询B树与B+树存储我们知道B+树实际上就是B树的变种那么为啥使用B+树而不是使用B树呢?我们知道效率的高低......
  • 用node读取Excel指定sheet并输出想要的数据结构
    数据部门维护了一个Excel表格,前端显示需要其中一个sheet的数据,这个表老是更新,想着用node写一个程序,每次数据部门更新直接跑一遍。直接上代码:constXLSX=require('xlsx');constpath=require('path');constfs=require('fs');//读取Excel文件constexcelFile='要读......
  • 什么是插入排序
    一、什么是插入排序插入排序是一种最简单的排序方法,其基本思想是将一个记录插入到已经排好序的有序表中,从而形成一个新的、记录数增1的有序表。其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素进行遍历,内层循环对当前元素前面有序表进行待插入位置查找,并进行移......