当前位置: 首页 > news >正文

数据结构排序算法详解

数据结构排序算法详解

    • 1、冒泡排序(Bubble Sort)
    • 2、选择排序(Selection Sort)
    • 2、插入排序(Insertion Sort)

1、冒泡排序(Bubble Sort)

原理:越小的元素会慢慢“浮”到数据序列的顶端,一次比较两个元素,根据比较的大小顺序调换。
算法描述:

  1. 比较相邻得两个元素,如果前者比后者大,则交换两者得位置
  2. 对每一对相邻的元素都重复步骤1,一直到最后一对元素对比完,这样序列尾端会选出最大的元素
  3. 对除了最后一个元素的其他所有的元素重复步骤1,2
  4. 重复不以上3个步骤,直到数据序列变成有序
    动图描述:
    冒泡排序动图演示
    代码实现:
 // 冒泡排序BubbleSort(arr) {for (let i = 0; i < arr.length - 1; i++) {for (let j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1]) { //相邻的元素进行比较let temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}return arr;},

2、选择排序(Selection Sort)

原理:首先在未排序序列中找到最小(大)元素,将其放到序列的起始位置,之后继续在剩下未排序序列中查找最小(大)元素,然后将其放到序列的起始位置,重复此操作直到所有元素都排序完毕
算法描述:

  1. 初始时已排序列为空,无序序列为[1,2,3…n]
  2. 第i次循环排序时,已排序列为[1,2,3…i-1],未排序列[i,i+1…n],此趟是从无序序列中查找最小(大)目标元素,并该目标元素与无序序列的第一个交换,使得已排序列增加一个生成新的已排序列,未排序列减少一个生成新的无序序列
  3. 第n-1次循环结束,序列变成有序序列
    动图演示:
    选择排序动图演示
    代码演示
 // 选择排序 例如:[10,7,11,16,5,]SelectionSort(arr) {let len = arr.length;let minIndex, temp;for (let i = 0; i < len - 1; i++) {minIndex = i;for (let j = i + 1; j < len; j++) {if (arr[j] < arr[minIndex]) {minIndex = j; // 下标为4值最小  minIndex = 4}}temp = arr[minIndex]; //temp =arr[4]=5 arr[4]= arr[0]=10  arr[0]=5arr[minIndex] = arr[i];arr[i] = temp;}console.log(arr);return arr;},

2、插入排序(Insertion Sort)

原理:是通过构建有序序列,对于没有排序的数据,从已经排序好的数据序列中从后往前扫描,直到找到相应的位置插入

算法描述:

  1. 从第一个元素开始,该元素被认为已排好序
  2. 取出下一个元素(新元素),从已排好序列数据中从后向前扫描
  3. 如果该元素(从后向前扫描的已排序数据)大于新元素,则将该元素移到下一个位置
  4. 重复步骤3(循环),直到找到已排序列中小于或等于新元素的位置
  5. 将新元素插入该位置
  6. 重复2-5步骤
    动图演示:
    插入排序动图演示
    代码实现:
 insertionSort(arr) {for (let i = 1; i < arr.length; i++) {let current = arr[i]; // 当前要插入的元素let preIndex = i - 1; // 已排序部分的最后一个索引// 将已排序部分中大于 current 的元素向右移动while (preIndex >= 0 && arr[preIndex] > current) {arr[preIndex + 1] = arr[preIndex];preIndex = preIndex - 1;}arr[preIndex + 1] = current; // 将 current 放到正确的位置}return arr;},

代码运行简单解释,例如arr=[12, 11, 13, 5, 6]
i=1时,是前两个元素进行比较,为了更明显从i=2解释
在这里插入图片描述

相关文章:

数据结构排序算法详解

数据结构排序算法详解 1、冒泡排序&#xff08;Bubble Sort&#xff09;2、选择排序&#xff08;Selection Sort&#xff09;2、插入排序&#xff08;Insertion Sort&#xff09; 1、冒泡排序&#xff08;Bubble Sort&#xff09; 原理&#xff1a;越小的元素会慢慢“浮”到数…...

在Linux设置postgresql开机自启动,创建一个文件 postgresql-15.service

在Linux设置postgresql开机自启动&#xff0c;创建一个文件 postgresql-15.service 在Linux设置postgresql开机自启动&#xff0c;创建一个文件 postgresql-15.service1. 创建 systemd 服务文件2. 编辑服务文件3. 保存并退出4. 重新加载 systemd 配置5. 启动 PostgreSQL 服务6.…...

【kafka】消息队列的认识,Kafka与RabbitMQ的简单对比

什么是消息队列&#xff1f; 消息队列&#xff08;Message Queue&#xff0c;简称 MQ&#xff09;是一个在不同应用程序、系统或服务之间传递数据的机制。 它允许系统间异步地交换信息&#xff0c;而无需直接交互&#xff0c;确保消息的可靠传输。 想象一下&#xff0c;你正在…...

ProjectSend 身份认证绕过漏洞复现(CVE-2024-11680)

0x01 产品描述: ProjectSend 是一个开源文件共享网络应用程序,旨在促进服务器管理员和客户端之间的安全、私密文件传输。它是一款相当流行的应用程序,被更喜欢自托管解决方案而不是 Google Drive 和 Dropbox 等第三方服务的组织使用。0x02 漏洞描述: ProjectSend r1720 之前…...

Android笔记(三十四):onCreate执行Handler.post在onResume后才能执行?

背景 偶然发现一个点&#xff0c;就是在onCreate执行Handler.post在onResume后才执行&#xff0c;以下是测试代码 多次运行的结果一致&#xff0c;为什么execute runnable不是在onCreate和onResume之间执行的呢&#xff0c;带着疑问撸了一遍Activity启动流程 关键源码分析 …...

关闭模组的IP过滤功能

关闭模组的IP过滤功能 关闭模组的IP过滤功能 本脚本用于关闭模组的IP过滤功能&#xff0c;关闭后&#xff0c; 源地址不是终端IP的数据包&#xff0c;也可以被模组转发给网络 关闭模组的IP过滤功能 cat > /usr/bin/ipfilter << "EOF"echo -e "ATCFUN…...

算法分析与设计复习笔记

插入排序 1. void insert_sort(int A[ ],int n) 2. { 3. int a,i,j; 4. for (i1;i<n;i) { 5. a A[ i ]; 6. j i – 1; 7. while (j>0 && A[j]>a) { 8. A[ j…...

vue-amap 高德地图

vue-amap是一套基于Vue 2/vue3和高德地图的地图组件 vue-amap 高德地图2.0版本的对应vue3...

Numpy基础练习

import numpy as np 1.创建一个长度为10的一维全为0的ndarray对象,然后让第5个元素等于1 n np.zeros(10,dtypenp.int32) n[4] 12.创建一个元素从10到49的ndarray对象 n np.arrange(10,50)3.将第2题的所有元素位置反转 n[::-1]使用np.random.random创建一个10*10的ndarray对象…...

一番赏小程序定制开发,打造全新抽赏体验平台

随着盲盒的热潮来袭&#xff0c;作为传统的潮玩方式一番赏也再次受到了大家的关注&#xff0c;市场热度不断上升&#xff01; 一番赏能够让玩家百分百中奖&#xff0c;商品种类丰富、收藏价值高&#xff0c;拥有各种IP&#xff0c;从而吸引着各个圈子的粉丝玩家&#xff0c;用…...

【前端】将vue的方法挂载到window上供全局使用,也方便跟原生js做交互

【前端】将vue的方法挂载到window上供全局使用&#xff0c;也方便跟原生js做交互 <template><div><el-button click"start">调用方法</el-button></div> </template> <script> // import { JScallbackProc } from ./JScal…...

Oracle查询优化:高效实现仅查询前10条记录的方法与实践

在 Oracle 中&#xff0c;实现仅查询前10条记录的四种方法 1. 使用 ROWNUM 查询 ROWNUM 是 Oracle 中的伪列&#xff0c;用于限制返回的行数。 SELECT * FROM table_name WHERE condition AND ROWNUM < 10;condition&#xff1a;查询条件。ROWNUM < 10&#xff1a;限制…...

go语言编译问题

go编译 goproxy地址 阿里云 https://mirrors.aliyun.com/goproxy/七牛云 https://goproxy.cn/开源版 https://goproxy.io/nexus社区 https://gonexus.dev/启用 Go Modules 功能 go env -w GO111MODULEon配置 GOPROXY 环境变量&#xff0c;以下三选一 七牛 CDN go env -w …...

mobi文件转成pdf

将 MOBI 文件转换为 PDF 格式通常涉及两个步骤&#xff1a; 解析 MOBI 文件&#xff1a;需要提取 MOBI 文件的内容&#xff08;文本、图片等&#xff09;。将提取的内容转换为 PDF&#xff1a;将 MOBI 文件的内容渲染到 PDF 格式。 可用工具 kindleunpack 或 mobi&#xff1…...

MobaXterm解决中文显示乱码问题

1 问题 打开MobaXterm时&#xff0c;会显示中文乱码。 2 解决方法 右键点击会话&#xff0c;在弹出菜单中选择“编辑会话”&#xff0c;如下&#xff1a; 选择终端字体设置&#xff0c;如下&#xff1a; 字符集换成ISO-8859-1&#xff0c;如下&#xff1a; 网上有说用…...

西门子 SINAMICS G120 变频器借助 ProfiNet 转 EtherCAT 实现与汇川 H5U 通讯实例

一&#xff0e; 案例背景 随着智能制造理念的推进&#xff0c;设备之间的协同工作变得越来越重要。例如&#xff0c;在机器人自动化焊接生产线中&#xff0c;电机驱动的焊接机器人需要与其他设备协同工作&#xff0c;这就要求负责电机控制的变频器和控制整个生产线流程的PLC能…...

流媒体之linux下离线部署FFmpeg 和 SRS

前言 用户对网络做了限制&#xff0c;只能访问指定的网址&#xff0c;和没网没啥区别&#xff0c;导致无法连接外网&#xff0c;无法获取安装包&#xff0c;还有一些编译需要的开源工具 用户需要用平台查看库房的海康摄像头实时监控&#xff0c;只能在库房里一台纯净的ubantu…...

NOBLEROYCE罗慕路斯门窗 以精工匠造开启私属人生

公元前753年罗马建立&#xff0c;其创建者为罗慕路斯。以狼孩的传奇形象成为古罗马精神象征的罗慕路斯&#xff0c;不仅是罗马的第一任国王&#xff0c;还创建了罗马最初的政治制度&#xff0c;罗马的名字也是源于这位伟大的奠基人。NOBLEROYCE罗慕路斯&#xff0c;致敬这位人类…...

【算法day8】字符串:反转

主播今天脑子不好用&#xff0c;先写两题吧~ 题目引用 反转字符串中的单词右旋字符串 1.反转字符串 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且…...

【C++进阶】第二节:多态

1、多态的概念 1.1 概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态。具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 2、多态的定义及实现 2.1 多态的构成条件 多态是在不同继承关系的类对象&#xff0c;去调用同一函数&a…...

从TSMC 256bit eFuse宏单元入手,搞懂芯片冗余修复(Repair)的底层逻辑

从TSMC 256bit eFuse宏单元入手&#xff0c;搞懂芯片冗余修复&#xff08;Repair&#xff09;的底层逻辑 在半导体制造领域&#xff0c;芯片良率始终是决定生产成本和市场竞争力的关键因素。随着工艺节点不断微缩&#xff0c;单个晶圆上集成的晶体管数量呈指数级增长&#xff0…...

深入解析PCI中断路由:从硬件引脚到操作系统中断处理的完整链路

1. 项目概述与核心问题在计算机硬件系统里&#xff0c;中断机制是设备与处理器高效通信的生命线。它允许设备在需要处理器服务时&#xff0c;主动“打断”处理器当前的工作流&#xff0c;而不是让处理器不断地去“询问”设备的状态。对于PCI&#xff08;Peripheral Component I…...

开源AI工作流框架:模块化设计、低代码实践与自动化场景构建

1. 项目概述&#xff1a;当AI工作流遇上开源协作最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff0c;叫“kiki-ai-workflow”。光看这个名字&#xff0c;你可能会有点懵&#xff0c;“kiki”是谁&#xff1f;“AI工作流”又具体指什么&#xff1f;作为一个在自…...

石榴石固态电解质表面再生:氧气处理与气氛控制的关键突破

1. 项目概述&#xff1a;破解石榴石固态电解质表面钝化的密码如果你正在研究或关注下一代高能量密度电池&#xff0c;那么对固态电解质&#xff08;Solid Electrolyte, SE&#xff09;一定不陌生。在众多候选者中&#xff0c;石榴石型固态电解质&#xff0c;特别是掺杂的LLZO&a…...

NotebookLM权限审计日志难追溯?手把手教你启用VPC Service Controls + Cloud Logging Query Builder构建实时越权预警看板

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM权限控制设置 NotebookLM 是 Google 推出的基于用户上传文档进行 AI 辅助理解与生成的实验性工具&#xff0c;其权限模型默认采用 Google 账户体系集成&#xff0c;但需主动配置以满足团队协…...

C8051Fxx系列MCU的Bootloader与ISP功能开发指南

1. C8051Fxx系列MCU的Bootloader与ISP功能概述在嵌入式系统开发中&#xff0c;C8051Fxx系列微控制器因其高性能和丰富的外设资源被广泛应用于工业控制、消费电子等领域。Bootloader&#xff08;引导加载程序&#xff09;和ISP&#xff08;在系统编程&#xff09;功能是这类MCU开…...

WarcraftHelper:魔兽争霸3终极增强插件,让经典游戏在现代电脑焕发新生

WarcraftHelper&#xff1a;魔兽争霸3终极增强插件&#xff0c;让经典游戏在现代电脑焕发新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper Warcraf…...

Xarray数据处理的隐藏神器:rioxarray实战,用SHP文件精准裁剪NetCDF气象数据

Xarray数据处理的隐藏神器&#xff1a;rioxarray实战&#xff0c;用SHP文件精准裁剪NetCDF气象数据 在气象、海洋和遥感领域&#xff0c;NetCDF格式的网格数据几乎是科研和业务工作中的标配。当我们面对全球或大区域的高分辨率数据集时&#xff0c;往往只需要提取其中某个特定区…...

【免费下载】 PyTorch框架入门PPT下载

PyTorch框架入门PPT下载 【下载地址】PyTorch框架入门PPT下载 PyTorch框架入门PPT下载 项目地址: https://gitcode.com/open-source-toolkit/a64b8 资源介绍 本仓库提供了一个名为“PyTorch框架入门PPT”的资源文件下载。该PPT文件旨在帮助初学者快速入门PyTorch框架&a…...

JLink V9.5 固件资源包

JLink V9.5 固件资源包 【下载地址】JLinkV9.5固件资源包 JLink V9.5 固件资源包欢迎使用JLink V9.5全套固件资源 项目地址: https://gitcode.com/open-source-toolkit/4bb56 欢迎使用JLink V9.5全套固件资源。本资源包专为那些需要对JLink调试器进行固件升级和自定义配…...