2024年回炉计划之排序算法(一)

算法是计算机科学和信息技术中的重要领域,涉及到问题求解和数据处理的方法。要学习算法,你可能需要掌握以下一些基本知识:

  1. 基本数据结构: 了解和熟练使用各种数据结构,如数组、链表、栈、队列、树和图等。数据结构是算法的基础,不同的问题可能需要不同的数据结构来解决。

  2. 算法的时间复杂度和空间复杂度: 理解算法的运行时间和空间占用对于选择合适的算法至关重要。学习如何分析算法的时间复杂度和空间复杂度,以便能够在不同情境下做出合理的选择。

  3. 排序和搜索算法: 排序和搜索是常见的算法问题。了解各种排序算法(如冒泡排序、快速排序、归并排序等)和搜索算法(如二分查找、深度优先搜索、广度优先搜索等)。

  4. 递归和迭代: 了解递归和迭代的概念,以及它们在算法设计中的应用。有时,递归是一种简洁而优雅的解决问题的方式。

  5. 动态规划和贪心算法: 学会应用动态规划和贪心算法解决问题。这两种方法在解决一些优化问题时非常有效。

  6. 图算法: 理解图的基本概念和算法,如深度优先搜索(DFS)、广度优先搜索(BFS)、最短路径算法(Dijkstra、Bellman-Ford)、最小生成树算法(Prim、Kruskal)等。

  7. 字符串匹配算法: 了解字符串匹配问题和相关的算法,如暴力法、KMP 算法、Boyer-Moore 算法等。

  8. 数学基础: 一些算法问题涉及到数学知识,特别是在设计和分析算法时。熟悉一些基本的数学概念和运算,可能会有助于理解某些算法的原理。

  9. 算法设计模式: 了解一些常见的算法设计模式,如分治法、贪心法、动态规划等。这有助于你在解决问题时选择合适的策略。

  10. 实践和练习: 最重要的是实践。通过解决各种算法问题,参与编程竞赛,或者在实际项目中应用算法,能够更好地理解和掌握算法。

        回归正题,特种兵有年度演习,开发者也应有年度回炉,不然脑袋锈掉。本周开启算法训练,先从排序算法开始(使用TS编码)。

一、冒泡排序

        在此之前,先弄个实现一个方法:

  • generateUniqueRandomIntegers: 函数名称。
  • count: number: 生成随机整数的个数。
  • max: number: 随机整数的最大值(包含在生成范围内)。
  • min: number = 0: 随机整数的最小值,默认为 0。
/*** 生成指定范围、个数、不重复的随机正整数集合。* @param count 范围* @param max 最大数* @param min 最小数*/
export function generateUniqueRandomIntegers(count: number, max: number, min: number = 0): number[] {if (count <= 0 || max <= min || !Number.isInteger(max) || !Number.isInteger(min) || !Number.isInteger(count)) {throw new Error("Invalid input parameters.Please ensure count is a positive integer, min is a non-negative integer, max is a positive integer greater than min.")}if (!(count <= (max - min + 1))) {throw new Error("(max - min + 1) should be >= count.")}const result: number[] = [];const uniqueNumbers: Set<number> = new Set();while (uniqueNumbers.size < count) {const randomInteger = Math.floor(Math.random() * (max - min +1)) + min;uniqueNumbers.add(randomInteger);}uniqueNumbers.forEach((value) => {result.push(value)})return  result;
}

        冒泡排序是最简单的排序算法之一,其基本思想是将相邻的两个元素进行比较,如果顺序不对就交换它们的位置。该算法的时间复杂度为O(n^2)。

const maopaoClickListener = () => {let length: number = 4;let array: number[] = generateUniqueRandomIntegers(length, 100, 1);rawData.value = JSON.stringify([...array])for (let i = 0; i < length - 1; i++) {let flag = false;for (let j = 0; j < length - 1 - i; j++) {if (array[j] > array[j + 1]) {let temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;flag = true;}}if (!flag) break;}result.value = JSON.stringify([...array])
}

二、插入排序

        插入排序的基本思想是将未排序序列(无序)中的每个元素插入到已排序序列(有序)的合适位置。该算法的时间复杂度也为O(n^2)。

        第一步,分为有序、无序两部分。

        第二步,取出无序部分的首个,在有序部分从后往前比较,插入到合适的部分。

        拆解: 代码部分第一个for(i=1;;i++),队列首个【3】是有序的,那么,i = 1,而非 0;

        拆解: 代码部分 j = i - 1; array[i] 往前逐个比较,有序部分逐个后移,直到找到合适位置;

const charuClickListener = () => {let length: number = 4;let array: number[] = generateUniqueRandomIntegers(length,100,1);rawData.value = JSON.stringify([...array])for (let i = 1; i < length; i++) {let itemI = array[i]let j = i - 1// 条件:有序值 大于 无序首个while (j > 0 && array[j] > itemI) {// 往后移array[j + 1] = array[j]j--}array[j + 1] = itemI}result.value = JSON.stringify([...array])
}

三、选择排序

        选择排序的基本思想是每次选择未排序序列中最小或最大的元素,将其放到已排序序列的末尾。该算法的时间复杂度也为O(n^2)。

        

const xuanzeClickListener = () => {let length: number = 4;let array: number[] = getArray(length);rawData.value = JSON.stringify({...array})for (let i = 0; i < length; i++) {let minIndex = ifor (let j = i + 1; j < length; j++) {if (array[i] > array[j]) {minIndex = j}}let temp = array[i]array[i] = array[minIndex]array[minIndex] = temp}result.value = JSON.stringify({...array})
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/632731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java导出Excel并合并单元格

需求&#xff1a;需要在导出excel时合并指定的单元格 ruoyi excel 项目基于若伊框架二次开发&#xff0c;本着能用现成的就不自己写的原则&#xff0c;先是尝试了Excel注解中needMerge属性 /*** 是否需要纵向合并单元格,应对需求:含有list集合单元格)*/public boolean needMer…

4人遇难,北京突发火情 富维烟火识别防止悲剧再次发生

在北京一处居民区&#xff0c;一场突如其来的火灾夺走了四条宝贵的生命。火情迅速蔓延&#xff0c;烟雾弥漫&#xff0c;居民们猝不及防。这一悲剧再次提醒我们&#xff0c;火灾预防和早期识别的重要性不容忽视。 在这样的背景下&#xff0c;北京富维图像公司开发的FIS智能图像…

搭建自己的媒体矩阵-关于三微一端的媒体矩阵最简方案

引言 随着互联网的快速发展&#xff0c;媒体矩阵已成为品牌宣传的重要战略。通过搭建自己的媒体矩阵&#xff0c;企业、品牌和个人能够更有效地触达目标受众&#xff0c;传递信息、建立品牌形象&#xff0c;并与用户进行深度互动。本文将深入探讨如何制定一个有效的三微一端媒…

高光谱分类论文解读分享之Grid Network: 基于各向异性视角下特征提取的高光谱影像分类

IEEE GRSL 2023&#xff1a;Grid Network: 基于各向异性视角下特征提取的高光谱影像分类 题目 Grid Network: Feature Extraction in Anisotropic Perspective for Hyperspectral Image Classification 作者 Zhonghao Chen , Student Member, IEEE, Danfeng Hong , Senior …

【H3C】配置AAA认证和Telnet远程登陆,S5130 Series交换机

AAA配置步骤为&#xff1a; 1.开启telent远程登陆服务 2.创建用户&#xff0c;设置用户名、密码、用户的服务类型 3.配置终端登录的数量 4.配置vlan-if的ip地址&#xff0c;用来远程登陆 5.允许对应的vlan通过 1.开启telent远程登陆服务 sys …

【驱动】I2C驱动分析(四)-关键API解析

简介 在Linux内核源代码中的driver目录下包含一个i2c目录 i2c-core.c这个文件实现了I2C核心的功能以及/proc/bus/i2c*接口。   i2c-dev.c实现了I2C适配器设备文件的功能&#xff0c;每一个I2C适配器都被分配一个设备。通过适配器访设备时的主设备号都为89&#xff0c;次设备号…

PBR材质纹理下载

03:10 按照视频里的顺序 我们从第6个网站开始倒数 点击本行文字或下方链接 进入查看 6大网站地址 网址查看链接&#xff1a; http://www.uzing.net/community_show-1962-48-48-35.html 06 Tectures Wood Fence 001 | 3D TEXTURES 简介&#xff1a;最大的纹理网站之一&#x…

机器学习:BootStrapping(Python)

import numpy as np import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.decomposition import PCA # 主成分分析 from sklearn.preprocessing import LabelEncoder, StandardScaler # 类别标签编码&#xff0c;标准化处理 import matplo…

推荐算法常见的评估指标

推荐算法评估指标比较复杂&#xff0c;可以分为离线和在线两部分。召回、粗排、精排和重排由于定位区别&#xff0c;其评估指标也会有一定区别&#xff0c;下面详细讲解。 1 召回评价体系 召回结果并不是最终推荐结果&#xff0c;其本质是为后续排序层服务的&#xff0c;故核…

中国联通助力吴江元荡生态岸线打造5G+自动驾驶生态长廊

吴江&#xff0c;素有“鱼米之乡”“丝绸之府”的美誉&#xff0c;其地理位置优越&#xff0c;地处太湖之滨。近年来&#xff0c;随着长三角生态绿色一体化发展示范区&#xff08;以下简称“示范区”&#xff09;的建立&#xff0c;元荡更是声名大噪&#xff0c;成为众多游客心…

GNU Radio简介及流程图搭建

文章目录 前言一、GNU Radio 是什么&#xff1f;二、GNU Radio 安装三、搭建第一个流程图1、创建 GRC 文件2、添加块3、运行流程图 前言 欢迎来到无线通信的世界&#xff0c;初步接触 GNU Radio&#xff0c;对其学习进行一个记录。 一、GNU Radio 是什么&#xff1f; GNU Rad…

el-tree获取当前选中节点及其所有父节点的id(包含半选中父节点的id)

如下图,我们现在全勾中的有表格管理及其下的子级,而半勾中的有工作台和任务管理及其子级 现在点击保存按钮后,需要将勾中的节点id及该节点对应的父节点,祖先节点的id(包含半选中父节点的id)也都一并传给后端,那这个例子里就应该共传入9个id,我们可以直接将getCheckedK…

SpringMVC 拦截器

文章目录 1、拦截器的配置2、拦截器的三个抽象方法3、多个拦截器的执行顺序总结 Spring MVC 拦截器是Spring框架中的一种机制&#xff0c;用于在请求到达处理器之前和渲染视图之前拦截请求&#xff0c;并允许开发者在这两个时间点进行自定义的处理逻辑。拦截器与过滤器&#xf…

openlayers [七] 地图控件controls详解

文章目录 controls 简述常见的 controls 控件使用方法fullscreen 全屏mouseposition 鼠标位置控件overviewmap 鹰眼图scaleline 比例尺控件zoomslider 缩放滑块刻度控件 总结 controls 简述 上篇文章我们将了在地图上的交互(interaction)&#xff0c;那些都是一些隐性的需要去…

css3轮播图案例

轮播图案例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>…

数据结构——二叉树的遍历与应用

目录 一.前言 二. 二叉树链式结构的实现 2.1 前置说明 2.2 二叉树的遍历 2.2.1 前序、中序以及后序遍历 前序遍历&#xff1a; 中序遍历递归图&#xff1a; 后序遍历&#xff1a; 2.3节点个数 2.4叶子节点个数 2.5第K层的节点个数 2.6 二叉树查找值为x的节点 2.7 …

【计算机网络】子网划分(经典基础练习题)

一、某主机IP地址为110.35.2.68&#xff0c;子网掩码为255.255.255.128&#xff0c;求网络地址&#xff1f; 二、有A类网络18.0.0.0的子网掩码为255.128.0.0&#xff0c;请问可以划分为多少个子网&#xff1f; 并写出每个子网的子网号&#xff1f; 三、将C类网119.181.25.0划分…

.NetCore Flurl.Http 4.0.0 以上管理客户端

参考原文地址&#xff1a;Managing Clients - Flurl 管理客户端 Flurl.Http 构建在堆栈之上System.Net.Http。如果您熟悉HttpClient&#xff0c;那么您可能听说过这个建议&#xff1a;不要为每个请求创建一个新客户端&#xff1b;重复使用它们&#xff0c;否则将面临后…

MySQL篇—性能压测工具mysqlslap介绍

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

Docker 安装 MongoDb4

Docker 安装mongoDb 获取mongodb安装参考 获取mongodb 注意&#xff1a; WARNING: MongoDB 5.0 requires a CPU with AVX support, and your current system does not appear to have that! **hub官网&#xff08;需要梯子&#xff09;&#xff1a;**https://hub.docker.com/_…