递归算法~快速排序、归并排序
递归排序是一种基于分治法的排序算法,最典型的例子就是快速排序和归并排序。这两种算法都利用递归将问题分解成更小的子问题,然后将子问题的解合并以得到原始问题的解。
1、快速排序(Quick Sort)
快速排序的基本思想是选择一个基准元素,将序列分割成两个子序列,小于基准元素的放在左边,大于基准元素的放在右边,然后对左右子序列递归地进行快速排序。
public class QuickSort {public static void quickSort(int[] arr) {if (arr == null || arr.length == 0) {return;}quickSort(arr, 0, arr.length - 1);}private static void quickSort(int[] arr, int left, int right) {if (left >= right) {return;}int pivot = partition(arr, left, right); // 分区操作,返回基准元素的位置quickSort(arr, left, pivot - 1); // 递归排序左子数组quickSort(arr, pivot + 1, right); // 递归排序右子数组}private static int partition(int[] arr, int left, int right) {int pivot = arr[right]; // 选择最右边的元素作为基准int i = left - 1; // i指向小于基准元素的最后一个元素for (int j = left; j < right; j++) {if (arr[j] < pivot) {i++;swap(arr, i, j); // 将小于基准的元素交换到左边}}swap(arr, i + 1, right); // 将基准元素交换到正确的位置return i + 1; // 返回基准元素的位置}private static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}public static void main(String[] args) {int[] arr = { 5, 2, 9, 3, 6, 1, 8, 7, 4 };quickSort(arr);System.out.println("array: " + Arrays.toString(arr));}
}
2、归并排序(Merge Sort)
归并排序采用分治法,将序列分成两个子序列,分别对它们进行排序,然后将已排序的子序列合并成一个有序序列。
public class MergeSort {public static void mergeSort(int[] arr) {if (arr == null || arr.length < 2) {return;}int[] temp = new int[arr.length];mergeSort(arr, 0, arr.length - 1, temp);}private static void mergeSort(int[] arr, int left, int right, int[] temp) {if (left < right) {int mid = (left + right) / 2;mergeSort(arr, left, mid, temp); // 对左半部分进行归并排序mergeSort(arr, mid + 1, right, temp); // 对右半部分进行归并排序merge(arr, left, mid, right, temp); // 合并左右两部分}}private static void merge(int[] arr, int left, int mid, int right, int[] temp) {int i = left; // 左序列指针int j = mid + 1; // 右序列指针int t = 0; // 临时数组指针while (i <= mid && j <= right) {if (arr[i] <= arr[j]) {temp[t++] = arr[i++];} else {temp[t++] = arr[j++];}}while (i <= mid) {temp[t++] = arr[i++]; // 将左边剩余元素填充进temp中}while (j <= right) {temp[t++] = arr[j++]; // 将右边剩余元素填充进temp中}t = 0;// 将temp中的元素全部拷贝到原数组中while (left <= right) {arr[left++] = temp[t++];}}public static void main(String[] args) {int[] arr = { 5, 2, 9, 3, 6, 1, 8, 7, 4 };mergeSort(arr);System.out.println("array: " + Arrays.toString(arr));}
}
相关文章:
递归算法~快速排序、归并排序
递归排序是一种基于分治法的排序算法,最典型的例子就是快速排序和归并排序。这两种算法都利用递归将问题分解成更小的子问题,然后将子问题的解合并以得到原始问题的解。 1、快速排序(Quick Sort) 快速排序的基本思想是选择一个基…...
DarkGPT:基于GPT-4-200k设计的人工智能OSINT助手
关于DarkGPT DarkGPT是一款功能强大的人工智能安全助手,该工具基于GPT-4-200k设计并实现其功能,可以帮助广大研究人员针对泄露数据库进行安全分析和数据查询相关的OSINT操作。 工具要求 openai1.13.3 requests python-dotenv pydantic1.10.12 工具安装 …...
RAG 检索增强生成有效评估
我们将介绍RAG(检索增强生成)的评估工作流程 RAG工作流程的部分 数据集 这里是我们将要使用的LCEL (LangChain Expression Language)相关问题的数据集。 这个数据集是在LangSmith UI中使用csv上传创建的: https://smith.langchain.com/public/730d833b-74da-43e2-a614-4e2ca…...
Day38:LeedCode 1049. 最后一块石头的重量 II 494. 目标和 474.一和零
1049. 最后一块石头的重量 II 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x < y。那么粉碎的可能结果…...
sqlalchemy分页查询
sqlalchemy分页查询 在SQLAlchemy中,可以使用limit和offset方法实现分页查询 from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from models import MyModel # 假设MyModel是你定义的模型# 连接数据库 engine = create_engine(sqlite:///myd…...
Java--常用类APl(复习总结)
前言: Java是一种强大而灵活的编程语言,具有广泛的应用范围,从桌面应用程序到企业级应用程序都能够使用Java进行开发。在Java的编程过程中,使用标准类库是非常重要的,因为标准类库提供了丰富的类和API,可以简化开发过…...
【股指期权投教】一手股指期权大概多少钱?
一手股指期权的权利金大概在几千人民币左右,如果是作为期权卖方还需要另外缴纳保证金的。国内的股指期权有三种,沪深300、上证50、中证1000股指期权,每点合约人民币100 元。 期权合约的价值计算可以通过此公式得出:权利金的支付或…...
mmap()函数和munmap()函数的例子
代码: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/mman.h> #include <string.h> #include <stdio.h> #include <unistd.h>#define FILELENGTH 80 int main(void) {int fd-1;char …...
计算神经网络中梯度的核心机制 - 反向传播(backpropagation)算法(1)
计算神经网络中梯度的核心机制 - 反向传播(backpropagation)算法(1) flyfish 链式法则在深度学习中的主要应用是在反向传播(backpropagation)算法中。 从简单的开始 ,文本说的就是链式法则 R …...
VUE实现简易购物车
主要是对基础的指令的使用,直接上代码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…...
混沌工程——从捣乱的视角看系统稳定性
概念 混沌工程是通过捣乱实验探究系统稳定性的实践过程,其作战武器是风险因子,即在健康的运行环境中引入风险变量来验证系统对风险的抵抗能力,它的作用是推动系统容错能力建设、验证监控告警及时性、提升研发问题排查能力。 混沌工程的工作…...
Windows宝塔面板部署ThinkPHP8.0创建Vue项目案例
安装ThinkPHP8.0 登录宝塔面板,创建一个站点。 输入composer代码,执行完成后自动创建TP目录 composer create-project topthink/think tp 网站目录设置为tp,运行目录设置为public 设置PHP版本为8.0以上,不然会出现下面的报错代…...
5G频段简介
5G频段 5G网络一共有29个频段,主要被分为两个频谱范围,其中6GHz以下的频段共有26个(统称为Sub6GHz),毫米波频段有3个。目前国内主要使用的是Sub6GHz,包括n1/n3/n28/n41/n77/n78/n79共7个频段。具体介绍如下…...
【python学习】bytearray 数组
在Python中,bytearray 是一个可变序列,用于表示一个字节数组。与不可变的 bytes 类型相比,bytearray 允许你修改其内容。你可以通过索引来访问和修改 bytearray 中的元素,也可以添加或删除元素。 使用 bytearray 的一些示例&…...
Labview_Occurrencel(事件发生)
PS:这里遇到 一个很Low的事情: 在停止第二个while循环的时候出现了停止不了的情况。因为等待事件发生设置的超时时间为:-1。所以等事件发生后出现了条件接线端已经执行的情况,所以当下次事件发生时未能及时停止。初版的停止设置如下图&#x…...
天气网站爬虫及可视化
摘要:随着互联网的快速发展,人们对天气信息的需求也越来越高。本论文基于Python语言,设计并实现了一个天气网站爬虫及可视化系统。该系统通过网络爬虫技术从多个天气网站上获取实时的天气数据,并将数据进行清洗和存储。同时&#…...
【python - 数据】
一、序列 序列(sequence)是一组有顺序的值的集合,是计算机科学中的一个强大且基本的抽象概念。序列并不是特定内置类型或抽象数据表示的实例,而是一个包含不同类型数据间共享行为的集合。也就是说,序列有很多种类&…...
几种热管的构造
1、超薄热管构造形式 在实际应用中,超薄热管通常定义为厚度小于2.0mm的平板热管。超薄热管很薄,可紧贴电子元件表面散热,故被广泛应用于移动和可携带电子设备,如智能手机、笔记本电脑和智能手表。用于笔记本电脑和平板电脑的超薄…...
【GitOps】使用Google工具JIB实现本地无需安装容器推送镜像,加速SpringCloud项目开发
文章目录 一、效果展示二、简介三、安装Jib插件1、区分环境2、安装插件一、效果展示 本地是window系统,无docker环境,没有任何runtime,使用jib工具打包镜像并推送完成,用时20秒 二、简介 Jib 是 Google 开发的一款开源工具,旨在帮助 Java 开发者更高效地将 Java 应用程…...
【proteus经典实战】16X192点阵程序
一、简介 6X192点阵程序通常用于表示高分辨率图像或文字,其中16X表示像素阵列的宽度,192表示每个像素阵列中的点阵数,16X192点阵程序需要一定的编程知识和技能才能编写和调试,同时还需要考虑硬件设备的兼容性和性能等因素。 初始…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...
倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
用鸿蒙HarmonyOS5实现国际象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的国际象棋小游戏的完整实现代码,使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├── …...
