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

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

时间:2024-04-09 11:48:28浏览次数:19  
标签:arr TypeScript newArr 冒泡排序 算法 数据结构 let 遍历 排序

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

概念

本质:相邻元素两两比较并交换位置,使整个序列按照特定的顺序排列

特性

复杂度分析

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

使用场景

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

  • 适用于数据规模较小的时候
  • 不适用于大规模数据的排序

具体代码

算法代码


// 可以直接导入下方提供的算法测试工具函数,函数内部提供模拟数据,非常方便的测试算法
import { testSort } from './utils';

/**
 - @desc  : 冒泡排序实现
 */
function bubbleSort(arr: number[]): number[] {
  const n = arr.length;

  // 外层遍历,数组内一共有多少个数据需要遍历
  for (let i = 0; i < n; i++) {
    // 是否交换
    let swapped = false;

    // 内层遍历,数组中每个元素分别需要遍历多少次,当一个到达尾部后,下一个遍历次数需 - 1
    for (let j = 0; j < n - 1 - i; j++) {
      //  按升序排序
      if (arr[j] > arr[j + 1]) {
        // 交换位置
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
        swapped = true;
      }
    }

    // 此轮一直未交换,则数据已排序,不需再执行后续遍历
    if (!swapped) break;
  }

  return arr;
}

// 此处可以直接使用 utils 提供的测试函数进行算法测试
testSort(bubbleSort);

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

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

util 工具函数



/**
 - @desc  : 判断排序是升序
 - @param  {number} arr:数组
 - @return {any} 是否升序
 */
function isSort(arr: number[]): boolean {
  for (let i = 0; i < arr.length; i++) {
    // 只有有一个不是升序,则返回 false
    if (arr[i] > arr[i + 1]) {
      return false;
    }
  }

  return true;
}

/**
 - @desc  : 测试排序的功能
 - @param  {any} sortFn:排序函数
 */
export function testSort(sortFn: Function) {
  // 构造随机测试的假数据
  let arr = new Array(10);
  const n = arr.length;

  for (let i = 0; i < n; i++) {
    arr[i] = Math.floor(Math.random() * 500);
  }

  console.log('排序前:', arr);

  let newArr = sortFn(arr);
  console.log('排序后:', newArr);

  console.log('排序是否成功?', isSort(newArr));
}

标签:arr,TypeScript,newArr,冒泡排序,算法,数据结构,let,遍历,排序
From: https://www.cnblogs.com/itchaox/p/18123593

相关文章

  • 优先队列的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程特性效率比普通队列高每个出队元素拥有最高优先级可以用数组、链表等数据结构实现,但是堆结构是最常用的实现方式设计实现方式:基于堆结构实现,堆结构底层基于数组实现属性:heap:存放队列元素方法:enq......
  • 插入排序的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程概念本质:将数列分为已排序和未排序,将未排序中的元素插入到已排序中的合适位置特性复杂度分析时间复杂度:最好情况:O(n),有序序列最坏情况:O(n^2),倒序序列平均情况:O(n^2),随机数列空间复杂度:O(n),原地排序使......
  • 选择排序的基本实现【数据结构与算法—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树呢?我们知道效率的高低......