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

排序算法(快排+推排序+归并排序)

一、快排(不稳定+O(NlogN))

分治思想,随机选一个数作为pivot,然后放到数组最后去,比这个元素小的放左边,比这个元素大的放右边。最后再交换左边放完后的下一个元素和pivot,这样就把一个元素排好序了,然后再递归把下一个元素排好序就可以了。

class Solution {public int[] sortArray(int[] nums) {quicksort(nums, 0, nums.length - 1);return nums;}public void quicksort(int[] nums, int left, int right) {if (left < right) {int pos = partition(nums, left, right);//找到分区点quicksort(nums, left, pos - 1);quicksort(nums, pos + 1, right);}}public int partition(int[] nums, int left, int right) {int randomindex = new Random().nextInt(right - left + 1) + left;//将随机数的范围从相对偏移转换为绝对位置swap(nums, randomindex, right);int pivot = nums[right];int i = left - 1;//标记“小于等于基准值”的子数组的边界for (int j = left; j < right; j++) {if (nums[j] <= pivot) {i++;swap(nums, i, j);}}swap(nums, i + 1, right);return i + 1;}public void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}
}

二、堆排序(O(NlogN))

堆其实是一个完全二叉树,根据堆的特性可以分为大根堆和小根堆,若节点下标为i,则左子节点下标为2i+1,右子节点下标为2i+2

用大根堆排序完的序列是正序的(递增)<先初始化一个大根堆,再交换元素>

用小根堆排序完的序列是倒序的(递减)

三、前K个高频元素

class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);}PriorityQueue<int[]> pq = new PriorityQueue<>((pair1, pair2) -> pair1[1] - pair2[1]);for (Map.Entry<Integer, Integer> entry : map.entrySet()) {//遍历每一个键值对if (pq.size() < k) {pq.add(new int[] { entry.getKey(), entry.getValue() });} else {if (entry.getValue() > pq.peek()[1]) {pq.poll();pq.add(new int[] { entry.getKey(), entry.getValue() });}}}int[] result = new int[k];for (int i = k - 1; i >= 0; i--) {result[i] = pq.poll()[0];}return result;}
}

四、数组中的第K个最大元素

使用优先级队列(数组中前k个高频元素简化版)

class Solution {public int findKthLargest(int[] nums, int k) {PriorityQueue<Integer> pq = new PriorityQueue<>();for(int num:nums){if(pq.size()<k){pq.add(num);}else{if(num>pq.peek()){pq.poll();pq.add(num);}}}return pq.peek();}
}

手撕时要自己构建一个堆

最后一个非叶子节点的索引是 heapsize/2-1

class Solution {public int findKthLargest(int[] nums, int k) {int heapsize = nums.length;buildmaxheap(nums,heapsize);for(int i = 0;i<k-1;i++){swap(nums,0,heapsize-1);heapsize--;maxheapify(nums,0,heapsize);}return nums[0];}public void buildmaxheap(int[] nums, int heapsize){for(int i = heapsize/2-1;i>=0;i--){maxheapify(nums,i,heapsize);}}public void maxheapify(int[] nums,int i,int heapsize){int left = 2*i +1,right = 2*i+2,largest = i;if(left<heapsize&&nums[left]>nums[largest]){largest=left;}if(right<heapsize&&nums[right]>nums[largest]){largest=right;}if(largest!=i){swap(nums,i,largest);maxheapify(nums,largest,heapsize);}}public void swap(int[] nums,int i,int j){int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}
}

相关文章:

排序算法(快排+推排序+归并排序)

一、快排&#xff08;不稳定O(NlogN)&#xff09; 分治思想&#xff0c;随机选一个数作为pivot&#xff0c;然后放到数组最后去&#xff0c;比这个元素小的放左边&#xff0c;比这个元素大的放右边。最后再交换左边放完后的下一个元素和pivot&#xff0c;这样就把一个元素排好…...

【股票系统】使用docker本地构建ai-hedge-fund项目,模拟大师炒股进行分析。人工智能的对冲基金的开源项目

股票系统: https://github.com/virattt/ai-hedge-fund 镜像地址: https://gitcode.com/gh_mirrors/ai/ai-hedge-fund 项目地址: https://gitee.com/pythonstock/docker-run-ai-hedge-fund 这是一个基于人工智能的对冲基金的原理验证项目。本项目旨在探讨利用人工智能进行…...

施工安全巡检二维码制作

进入新时代以来&#xff0c;人们对安全的重视程度越来越高。特别在建筑施工行业&#xff0c;安全不仅是关乎着工人的性命&#xff0c;更是承载着工人背后家庭的幸福生活。此时就诞生了安全巡检的工作&#xff0c;而巡检过程中内容庞杂&#xff0c;安全生产检查、隐患排查、施工…...

什么是函数依赖中的 **自反律(Reflexivity)**、**增广律(Augmentation)** 和 **传递律(Transitivity)?

文章目录 1. 自反律&#xff08;Reflexivity Rule&#xff09;规则定义实际例子应用意义 2. 增广律&#xff08;Augmentation Rule&#xff09;规则定义实际例子应用意义 3. 传递律&#xff08;Transitivity Rule&#xff09;规则定义实际例子应用意义 综合应用场景&#xff1a…...

基于 Google Earth Engine (GEE) 的土地利用变化监测

一、引言 土地利用变化是全球环境变化的重要组成部分&#xff0c;对生态系统、气候和人类社会产生深远影响。利用遥感技术可以快速、准确地获取土地利用信息&#xff0c;监测其变化情况。本文将详细介绍如何使用 GEE 对特定区域的 Landsat 影像进行处理&#xff0c;实现土地利…...

Java基础语法10分钟速成

Java基础语法10分钟速成&#xff0c;记笔记版 JDKhello world变量字符串 类&#xff0c;继承&#xff0c;多态&#xff0c;重载 JDK JDK即Java development key&#xff0c;Java环境依赖包 在jdk中 编译器javac将代码的Java源文件编译为字节码文件&#xff08;.class&#xff…...

如何在Spring Boot中实现热加载以避免重启服务器

在 Spring Boot 开发中&#xff0c;频繁修改代码&#xff08;如 Java 类、配置文件或静态资源&#xff09;通常需要重启服务器&#xff0c;这会中断开发流程并降低效率。热加载&#xff08;Hot Reloading&#xff09;允许开发者在不重启服务器的情况下重新加载更改&#xff0c;…...

BT169-ASEMI无人机专用功率器件BT169

编辑&#xff1a;ll BT169-ASEMI无人机专用功率器件BT169 型号&#xff1a;BT169 品牌&#xff1a;ASEMI 封装&#xff1a;SOT-23 批号&#xff1a;最新 引脚数量&#xff1a;3 特性&#xff1a;单向可控硅 工作温度&#xff1a;-40℃~150℃ BT169单向可控硅&#xff…...

C++学习笔记(三十六)——STL之排序算法

一、STL 算法 C的STL&#xff08;Standard Template Library&#xff09; 提供了一组高效、通用的算法&#xff0c;这些算法适用于各种容器&#xff08;如 vector、list、set、map&#xff09;。 这些算法主要位于 <algorithm> 和 <numeric> 头文件中。 通用性&a…...

AI图像编辑器 Luminar Neo 便携版 Win1.24.0.14794

如果你对图像编辑有兴趣&#xff0c;但又不想花费太多时间学习复杂的软件操作&#xff0c;那么 Luminar Neo 可能就是你要找的完美工具。作为一款基于AI技术的创意图像编辑器&#xff0c;Luminar Neo简化了复杂的编辑流程&#xff0c;即使是没有任何图像处理经验的新手&#xf…...

发币流程是什么,需要多少成本?

这是一个专注于Web3相关开发的账号&#xff0c;具体会讲解步骤以及开发方案 偶尔会有科普&#xff0c;有兴趣的可以点右上角关注一下 发币&#xff08;发行数字货币&#xff09;的流程通常涉及技术实现、法律合规、经济模型设计等多个环节&#xff0c;以下是关键步骤的简要说明…...

【fork初体验】

文章目录 Linux 实验&#xff1a;深入理解 fork 系统调用一、实验目的二、实验环境三、实验内容与步骤&#xff08;一&#xff09;打印进程的进程 ID 和父进程 ID1. 编写程序2. 编译与运行3. 运行结果 &#xff08;二&#xff09;使用 fork 系统调用创建进程并加入循环语句1. 编…...

学习设计模式《六》——抽象工厂方法模式

一、基础概念 抽象工厂模式的本质是【选择产品簇(系列)的实现】&#xff1b; 抽象工厂模式定义&#xff1a;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类&#xff1b; 抽象工厂模式功能&#xff1a;抽象工厂的功能是为一系列相关对象或相互依…...

python_BeautifulSoup提取html中的信息

目录 描述&#xff1a; 过程&#xff1a; step one 下载html网页到本地 step two 提取html信息 list_con soup.select(.list-con) [0] li_list list_con.find_all(li) a li.find(span).find(a) title a.get(title) url a.get(href) span li.find(span).find(spa…...

单例设计模式之懒汉式以及线程安全问题

在单例设计模式中&#xff0c;懒汉式&#xff08;Lazy Initialization&#xff09; 通过延迟实例化来优化资源使用&#xff0c;但在多线程环境下存在线程安全问题。以下是其核心问题及解决方案的详细解析&#xff1a; 一、基础懒汉式代码&#xff08;线程不安全&#xff09; pu…...

今日头条如何查看IP归属地?详细教程与常见问题解答

在当今互联网时代&#xff0c;IP属地信息已成为各大社交平台展示用户真实性的重要标识。今日头条作为国内领先的资讯平台&#xff0c;也提供了IP属地显示功能。那么&#xff0c;今日头条怎么查看IP归属地&#xff1f;本文将详细介绍在今日头条11.9.0版本中如何查看自己和他人的…...

React-Hook

一、基础 Hooks 1、useState - 状态管理 useState 是 React 提供的一个函数&#xff0c;用来在函数组件中声明和修改状态&#xff0c;没有它&#xff0c;函数组件只是一个“静态模板”&#xff1b;有了它&#xff0c;函数组件可以保存和更新数据&#xff08;比如计数器数值、输…...

前端节流、防抖函数

节流 什么是节流&#xff1f; 节流就是同一个事件 一秒钟他执行了很多次。但是我不想他执行这么多次&#xff0c;我只想让他执行一次 或者两次。 那该怎么办&#xff1f; why baby why 那我想就是他执行的时候 我就设置一个定时器&#xff0c;如果定时器是空的&#xff0c;等会…...

高级java每日一道面试题-2025年4月26日-基础篇[反射篇]-什么是类型擦除?它与反射之间有什么关系?

如果有遗漏,评论区告诉我进行补充 面试官: 什么是类型擦除&#xff1f;它与反射之间有什么关系&#xff1f; 我回答: 类型擦除与反射的深度解析 一、类型擦除&#xff08;Type Erasure&#xff09; 类型擦除是Java泛型实现的核心机制&#xff0c;旨在通过编译期处理确保向…...

Centos7系统防火墙使用教程

CentOS 7是一种常见的Linux操作系统&#xff0c;防火墙作为网络安全的第一道防线&#xff0c;对于服务器的安全至关重要。本文将介绍CentOS 7系统中防火墙的使用教程&#xff0c;包括如何开启、关闭、配置以及防火墙规则的添加和删除。 一、查看防火墙状态 在开始操作之前&am…...

缓存与数据库数据一致性:旁路缓存、读写穿透和异步写入模式解析

旁路缓存模式、读写穿透模式和异步缓存写入模式是三种常见的缓存使用模式&#xff0c;以下是对三种经典缓存使用模式在缓存与数据库数据一致性方面更全面的分析&#xff1a; 一、旁路缓存模式&#xff08;Cache - Aside Pattern&#xff09; 1.数据读取流程 应用程序首先向缓…...

【物联网】基于LORA组网的远程环境监测系统设计(机智云版)

基于LORA组网的远程环境监测系统设计(机智云版) 演示视频: 简介: 1.本系统有一个主机,两个从机。 2.一主多从的LORA组网通信,主机和两个从机都配备了STM32F103单片机与 LoRa 模块,主机作为中心设备及WIFI网关,负责接收和发送数据到远程物联网平台和手机APP,两个从机…...

Pygame事件处理详解:键盘、鼠标与自定义事件

Pygame事件处理详解:键盘、鼠标与自定义事件 在游戏开发中,玩家的交互是至关重要的。无论是移动角色、触发动作还是暂停游戏,都需要通过各种输入来实现。Pygame作为一个功能强大的Python库,提供了丰富的API来处理这些输入,包括键盘、鼠标以及自定义事件。本文将详细介绍如…...

制作一款打飞机游戏22:表格导出

编辑器功能扩展 今天&#xff0c;我想让编辑器能够处理一个数组&#xff0c;这是编辑器将要编辑的东西&#xff0c;它只编辑数组。这些区域在后续的不同版本的编辑器中会有不同的含义&#xff0c;但现在我想创建一个模板&#xff0c;能够加载一个二维数组&#xff0c;并将二维…...

Linux内核源码结构

目录 Linux内核源码结构 Linux内核版本命名 Linux内核版本选择 内核源码结构 arch&#xff1a;与CPU架构相关的源代码 block:磁盘设备的支持 COPYING文件 CREDITS文件 crypto:加密相关 Documentation: drivers:设备驱动 firmware:固件 fs:文件系统 include:头文件…...

72.评论日记

【巫师】中美关税战02&#xff1a;应给人民爆装备&#xff0c;以及普通人如何应对(7条建议)_哔哩哔哩_bilibili 2025年4月26日11:03:31...

在springboot项目中,如何进行excel表格的导入导出功能?

以下是使用 Apache POI 和 EasyExcel 实现 Excel 表格导入导出功能的具体代码示例。 1. 使用 Apache POI 实现 Excel 导入导出 添加依赖 在 pom.xml 中添加 Apache POI 的依赖&#xff1a; <dependency><groupId>org.apache.poi</groupId><artifactId…...

Websocket自动发送消息客户端工具

点击下载《Websocket自动发送消息客户端工具》 1. 前言 在现代网络应用中&#xff0c;实时通信和即时数据传输变得越来越重要。WebSocket作为一种全双工通信协议&#xff0c;因其高效、实时的特点&#xff0c;被广泛应用于聊天应用、实时数据监控、在线游戏等领域。然而&…...

STM32的开发环境介绍

目录 STM32软件环境 Keil软件在线安装 其他软件环境安装 STM32开发的几种方式 STM32寄存器版本和库函数版本 标准外设库的作用&#xff1a; STM32软件环境 STM32 的集成开发环境&#xff08;IDE&#xff09;&#xff1a;编辑编译软件 常见的环境&#xff1a; (1)KEIL&a…...

数据库系统概论(四)关系操作,关系完整性与关系代数

数据库系统概论&#xff08;四&#xff09;详细讲解关系操作&#xff0c;关系完整性与关系代数 前言一、什么是关系操作1.1 基本的关系操作1.2 关系数据语言的分类有哪些 二、关系的完整性2.1 实体完整性2.2 参照完整性2.3 用户的定义完整性 三、关系代数是什么3.1 传统的集合运…...