排序算法基本原理及实现1
📑打牌 : da pai ge的个人主页
🌤️个人专栏 : da pai ge的博客专栏
☁️宝剑锋从磨砺出,梅花香自苦寒来
📑插入排序
📑直接插入排序-原理
📑实现
public static void insertSort(int[] array) {for (int i = 1; i < array.length; i++) {// 有序区间: [0, i)// 无序区间: [i, array.length)int v = array[i]; // 无序区间的第一个数int j = i - 1;// 不写 array[j] == v 是保证排序的稳定性for (; j >= 0 && array[j] > v; j--) {array[j + 1] = array[j];}array[j + 1] = v;}
}
📑性能分析
📑折半插入排序
public static void bsInsertSort(int[] array) {for (int i = 1; i < array.length; i++) {int v = array[i];int left = 0;int right = i;// [left, right)// 需要考虑稳定性while (left < right) {int m = (left + right) / 2;if (v >= array[m]) {left = m + 1;} else {right = m;}}// 搬移for (int j = i; j > left; j--) {array[j] = array[j - 1];}
📑希尔排序
📑原理
📑性能分析
📑选择排序
📑直接选择排序-原理
public static void shellSort(int[] array) {int gap = array.length;while (gap > 1) {insertSortGap(array, gap);gap = (gap / 3) + 1; // OR gap = gap / 2;}insertSortGap(array, 1);
}
private static void insertSortGap(int[] array, int gap) {for (int i = 1; i < array.length; i++) {int v = array[i];int j = i - gap;for (; j >= 0 && array[j] > v; j -= gap) {array[j + gap] = array[j];}array[j + gap] = v;}
}
public static void selectSort(int[] array) {for (int i = 0; i < array.length - 1; i++) {// 无序区间: [0, array.length - i)// 有序区间: [array.length - i, array.length)int max = 0;for (int j = 1; j < array.length - i; j++) {if (array[j] > array[max]) {max = j;}}int t = array[max];array[max] = array[array.length - i - 1];array[array.length - i - 1] = t;}
}
int[] a = { 9, 2, 5a, 7, 4, 3, 6, 5b };
// 交换中该情况无法识别,保证 5a 还在 5b 前边
public static void selectSortOP(int[] array) {
📑性能分析
📑双向选择排序
📑堆排序
📑原理
基本原理也是选择排序,只是不在使用遍历的方式查找无序区间的最大的数,而是通过堆来选择无序区间的最大的
int low = 0;int high = array.length - 1;// [low, high] 表示整个无序区间// 无序区间内只有一个数也可以停止排序了while (low <= high) {int min = low;int max = low;for (int i = low + 1; i <= max; i++) {if (array[i] < array[min]) {min = i;}if (array[i] > array[max]) {max = i;}}swap(array, min, low);// 见下面例子讲解if (max == low) {max = min;}swap(array, max, high);}
}
private void swap(int[] array, int i, int j) {int t = array[i];array[i] = array[j];array[j] = t;
}
array = { 9, 5, 2, 7, 3, 6, 8 }; // 交换之前
// low = 0; high = 6
// max = 0; min = 2
array = { 2, 5, 9, 7, 3, 6, 8 }; // 将最小的交换到无序区间的最开始后
// max = 0,但实际上最大的数已经不在 0 位置,而是被交换到 min 即 2 位置了
// 所以需要让 max = min 即 max = 2
array = { 2, 5, 8, 7, 3, 6, 9 }; // 将最大的交换到无序区间的最结尾后
📑实现
public static void heapSort(int[] array) {createHeap(array);for (int i = 0; i < array.length - 1; i++) {// 交换前// 无序区间: [0, array.length - i)// 有序区间: [array.length - i, array.length)swap(array, 0, array.length - i - 1);// 交换后// 无序区间: [0, array.length - i - 1)// 有序区间: [array.length - i - 1, array.length)// 无序区间长度: array.length - i - 1shiftDown(array, array.length - i - 1, 0);}
}
相关文章:
排序算法基本原理及实现1
📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 📑插入排序 Ǵ…...
Unity 轨道展示系统(DollyMotion)
DollyMotion 🍱功能展示🥙使用💡设置路径点💡触发点位切换💡动态更新路径点💡事件触发💡设置路径💡设置移动方案固定速度方向最近路径方向 💡设置移动速度曲线 传送门 &a…...
优维低代码实践:搜索功能
优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…...
C# ReadOnlyRef Out
C# ReadOnly ReadOnly先看两种情况1.值类型2.引用类型 结论 Ref Out ReadOnly官方文档 ReadOnly 先看两种情况 1.值类型 当数据是值类型时,标记为Readonly时,如果再次设置值,会提示报错,无法分配到只读字段 public class A {pri…...
linux 服务 下 redis 安装和 启动
官网下载 https://redis.io/download/ 安装步骤: 1.安装redis 所需要的依赖 yum install -y gcc tcl2.上传安装包并解压,下载安装包,上传到/usr/local/src目录,解压 tar -zxvf redis-7.2.3.tat.gz进入安装目录,运行…...
ECharts与Excel的结合实战
引言:本文是一篇ECharts和Excel实战的记录。将Excel与ECharts产生火花,从Excel读取数据然后在ECharts上展示。 1.柱状图前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title…...
UDP的特点及应用场景
目录 UDP特点 应用场景 总结 User Datagram Protocol(UDP,用户数据报协议)是互联网协议套件中的一种传输层协议。与TCP不同,UDP是一种无连接的、不可靠的协议。 UDP特点 要知道UDP可以用来做什么,首先我们要知道它…...
Python开发——工具篇 Pycharm的相关配置,Python相关操作 持续更新
前言 本篇博客是python开发的工具篇相关,介绍pycharm的使用和相关配置,收录python的相关操作,比如如何启动jupyter。 目录 前言引出Pycharmpycharm如何不同等级日志显示不同颜色设置不同pycharm的python环境 Python操作如何启动Jupyter 总结…...
【深度学习】卷积神经网络结构组成与解释
卷积神经网络是以卷积层为主的深度网路结构,网络结构包括有卷积层、激活层、BN层、池化层、FC层、损失层等。卷积操作是对图像和滤波矩阵做内积(元素相乘再求和)的操作。 1. 卷积层 常见的卷积操作如下: 卷积操作解释图解标准卷…...
从源码解析Containerd容器启动流程
从源码解析Containerd容器启动流程 本文从源码的角度分析containerd容器启动流程以及相关功能的实现。 本篇containerd版本为v1.7.9。 更多文章访问 https://www.cyisme.top 本文从ctr run命令出发,分析containerd的容器启动流程。 ctr命令 查看文件cmd/ctr/comman…...
引迈-JNPF低代码项目技术栈介绍
从 2014 开始研发低代码前端渲染,到 2018 年开始研发后端低代码数据模型,发布了JNPF开发平台。 谨以此文针对 JNPF-JAVA-Cloud微服务 进行相关技术栈展示: 1. 项目前后端分离 前端采用Vue.js,这是一种流行的前端JavaScript框架&a…...
如何处理枚举类型(下)
作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 上一篇我们通过编写MyB…...
wsj0数据集原始文件.wv1.wv2转换成wav文件
文章目录 准备一、获取WSJO数据集二、安装sph2pipe三、转换代码四、结果展示 最近做语音分离实验需要用到wsj0-2mix数据集,但是从李宏毅语音分离教程里面获取的wsj0-2mix只有一部分。从网上获取到了完整的WSJO数据集后,由于原始的语音文件后缀是wv1或…...
Flask Session 登录认证模块
Flask 框架提供了强大的 Session 模块组件,为 Web 应用实现用户注册与登录系统提供了方便的机制。结合 Flask-WTF 表单组件,我们能够轻松地设计出用户友好且具备美观界面的注册和登录页面,使这一功能能够直接应用到我们的项目中。本文将深入探…...
【运维】hive 高可用详解: Hive MetaStore HA、hive server HA原理详解;hive高可用实现
文章目录 一. hive高可用原理说明1. Hive MetaStore HA2. hive server HA 二. hive高可用实现1. 配置2. beeline链接测试3. zookeeper相关操作 一. hive高可用原理说明 1. Hive MetaStore HA Hive元数据存储在MetaStore中,包括表的定义、分区、表的属性等信息。 hi…...
C#开发的OpenRA游戏之属性SelectionDecorations(13)
C#开发的OpenRA游戏之属性SelectionDecorations(13) 在前面分析SelectionDecorations属性类时,会发现它有下面这个属性: public class SelectionDecorations : SelectionDecorationsBase, IRender { readonly Interactable interactable; 它是定义了一个Interactabl…...
接手了一个外包开发的项目,我感觉我的头快要裂开了~
嗨,大家好,我是飘渺。 最近,我和小伙伴一起接手了一个由外包团队开发的微服务项目,这个项目采用了当前流行的Spring Cloud Alibaba微服务架构,并且是基于一个“大名鼎鼎”的微服务开源脚手架(附带着模块代…...
git常规使用方法,常规命令
Git是一种分布式版本控制系统,它可以记录软件的历史版本,并提供了多人协作开发、版本回退等功能。以下是Git的基本使用方法: 安装Git:下载安装包并进行安装,安装完成后在命令行中输入 git --version 进行验证。 初始化…...
【JavaScript】3.3 JavaScript工具和库
文章目录 1. 包管理器2. 构建工具3. 测试框架4. JavaScript 库总结 在你的 JavaScript 开发之旅中,会遇到许多工具和库。这些工具和库可以帮助你更有效地编写和管理代码,提高工作效率。在本章节中,我们将探讨一些常见的 JavaScript 工具和库&…...
开发基于 ChatGPT 分析热点事件并生成文章的网站应用【热点问天】把百度等热点用chatGPT来对热点事件分析海量发文章 开发步骤 多种方式获取利润
这样做的优点: 1.不用每个人都问chatGPT同样的问题。 2.已经生成的,反应快速。 3.内容分析的客观,真实,基于数据,无法造假。 4.无其它目的这种基于 ChatGPT 分析热点事件并生成文章的网站,可以通过多种方式…...
从数据采集到回放验证:ADTF 适配 ROS 的 ADAS 测试实践谒
一、简化查询 1. 先看一下查询的例子 /// /// 账户获取服务 /// /// /// public class AccountGetService(AccountTable table, IShadowBuilder builder) {private readonly SqlSource _source new(builder.DataSource);private readonly IParamQuery _accountQuery build…...
从原理到实战:LRU缓存算法的核心机制与工程实践
1. LRU缓存算法的基础原理 最近最少使用(LRU)算法是每个后端工程师都应该掌握的缓存淘汰策略。我第一次在线上系统使用LRU时,发现它完美解决了我们的缓存击穿问题。简单来说,LRU就像图书馆里整理书籍的管理员——总是把最近被借阅…...
2026年高性价比降AI工具:SpeedAI降AIGC率稳过审
2026年AIGC工具已经全面融入各类内容创作场景,降AI率、降AIGC率不再是学术圈的小众需求,更是论文写作、商业文案产出、自媒体内容创作、正式文稿发表等场景的核心刚需。现在市面上降AI工具种类繁多,但真正能做到效果稳定、不改动核心内容、操…...
港口淡水罐远程监控物联网系统方案
随着全球贸易的持续增长,港口作为物流枢纽的重要性日益凸显。淡水作为港口运营的关键资源,不仅用于船舶补给、设备冷却,还涉及消防、生活用水等多个环节。当前,智慧码头理念与物联网技术深度融合,降本增效与数字化管理…...
Go语言全栈开发从入门到精通:微服务架构与云原生实战指南
Go语言全栈开发从入门到精通:微服务架构与云原生实战指南 这不是一篇停留在 Demo 层面的 Go 教程,而是一篇面向真实业务系统的工程化实践文章。我们将围绕“高并发订单中心”这个典型场景,从语言特性、架构演进、分布式通信、数据一致性、可观测性、Kubernetes 部署到生产问…...
钻床夹具(说明书+装配图)
钻床夹具是机械加工中提升钻孔精度与效率的关键工具。其核心作用在于通过精准定位与可靠夹紧,确保工件在钻孔过程中保持稳定,避免因振动或位移导致的孔位偏差。传统钻孔作业依赖人工反复校准,不仅效率低下,且难以保证批量加工的一…...
MCP服务器架构设计图首次公开:含时序一致性保障机制、跨域设备注册拓扑、双向心跳状态机(2024 Q2最新LTS版)
第一章:MCP服务器架构设计图概览与核心设计哲学MCP(Modular Control Plane)服务器并非传统单体控制平面的简单重构,而是一种以“可插拔、可观测、可演进”为根基的分布式控制面架构。其设计图呈现清晰的分层结构:底层为…...
一网推百度爱采购代运营助力泰铖自动化斩获海量精准询盘
在工业制造数字化升级的当下,百度爱采购已然成为机械设备企业开拓线上客源的核心阵地,然而诸多中小厂商因缺乏专业运营手段,难以发挥平台价值。张家港市泰铖自动化设备有限公司主营半自动弯管机、缩管机、倒角机与切管机,曾面临线…...
Redis持久化:从AOF到RDB,如何实现数据不丢失?聊
Qt是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本笔记将重点介绍QSpinBox数值微调组件的常用方法及灵活应用。…...
Matlab新手也能搞定的MFAC仿真:从侯忠生教授书上的例题4.1代码跑通说起
Matlab新手也能搞定的MFAC仿真:从侯忠生教授书上的例题4.1代码跑通说起 第一次接触无模型自适应控制(MFAC)时,很多人会被各种理论推导吓退。但作为工程师,我们更关心的是如何让代码跑起来,看到实际效果。本…...
