【算法练习】leetcode算法题合集之排序篇

排序算法

快速排序

单路快排

获取随机一个元素,元素左边是小于它的,元素右边是大于它的。

partition:选择一个元素,交换left。比较nums[left]和nums[i],如果nums[i]<nums[left],找到一个小于标的元素的数据,交换到j的位置,j记录着最后一个小于标的元素的数据,切换j和left的位置,j所在的元素就是标的元素,返回j。

获取left到right的随机一个索引,new Random().nextInt(right - left + 1) + left;。0-9随机一个数,是10的随机数。

public class QuickSort1 {public static void main(String[] args) {int[] nums = new int[]{3, 2, 1, 5, 7, 4, 6};new QuickSort1().sort(nums);System.out.println(Arrays.toString(nums));}public void sort(int[] nums) {sort(nums, 0, nums.length - 1);}private void sort(int[] nums, int left, int right) {if (left >= right) {return;}int p = partition(nums, left, right);sort(nums, left, p - 1);sort(nums, p + 1, right);}private int partition(int[] nums, int left, int right) {int p = new Random().nextInt(right - left + 1) + left;swap(nums, p, left);int j = left;for (int i = left + 1; i <= right; i++) {if (nums[i] < nums[left]) {j++;swap(nums, i, j);}}swap(nums, left, j);return j;}private void swap(int[] nums, int i, int j) {int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}
}
双路快排

如果小于标的元素,符合要求,p1++;大于标的元素,符合要求,p2–。

找到前面不满足要求的元素,将前面的大的元素和后面小的元素互换位置。

选择p2:[left,p1-1]是小于标的元素的,[p2+1,right]是大于标的元素。选择p2就是选择小于标的元素的数据和标的元素互换。

public class QuickSort2 {public static void main(String[] args) {int[] nums = new int[]{3, 2, 1, 5, 7, 4, 6};new QuickSort2().sort(nums);System.out.println(Arrays.toString(nums));}public void sort(int[] nums) {sort(nums, 0, nums.length - 1);}private void sort(int[] nums, int l, int r) {if (l >= r) {return;}int p = partition(nums, l, r);sort(nums, l, p - 1);sort(nums, p + 1, r);}private int partition(int[] nums, int l, int r) {int p = new Random().nextInt(r - l + 1) + l;swap(nums, l, p);int p1 = l + 1;int p2 = r;while (true) {//3  145672while (p1 <= p2 && nums[p1] < nums[l]) {p1++;}while (p1 <= p2 && nums[p2] > nums[l]) {p2--;}if (p1 >= p2) {break;}swap(nums, p1++, p2--);}swap(nums, l, p2);return p2;}private void swap(int[] nums, int i, int j) {int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}
}

堆排序

用数组存储完全二叉树,parent(i)=(i-1)/2;左孩子是2*i+1,右孩子是2*1+2

构建大顶堆。找到所有有左孩子或者有孩子的节点(0-len / 2 - 1),和它的左孩子、右孩子比较,将大的元素切换到根节点。继续处理以小的元素为根节点的子树。

把大顶堆的最大元素放在数组最后,将数组之前的元素重新构建大顶堆。

public class HeapSort {public void sort(int[] nums) {buildHeap(nums, nums.length);for (int i 

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

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

相关文章

P1065 [NOIP2006 提高组] 作业调度方案题目

题目 我们现在要利用m台机器加工n个工件&#xff0c;每个工件都有m道工序&#xff0c;每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。 每个工件的每个工序称为一个操作&#xff0c;我们用记号j-k表示一个操作&#xff0c;其中j为1到n中的某个数…

群辉NAS的远程访问

群辉NAS是私有云存储&#xff0c;局域网访问很容易【详见&#xff1a;网上邻居访问设置、其它设备的访问设置】&#xff0c;远程访问相对复杂&#xff0c;涉及很多关键因素&#xff0c;现将过程记录如下&#xff1a; 目录 1、互联网接入 2、绑定MAC与IP地址 3、路由器开启5…

算法随想录第四十三天打卡|1049. 最后一块石头的重量 II ,494. 目标和 ,474.一和零

1049. 最后一块石头的重量 II 本题就和 昨天的 416. 分割等和子集 很像了&#xff0c;可以尝试先自己思考做一做。 视频讲解&#xff1a;动态规划之背包问题&#xff0c;这个背包最多能装多少&#xff1f;LeetCode&#xff1a;1049.最后一块石头的重量II_哔哩哔哩_bilibili 代…

eclipse中导入运行MyEclipse项目...非常实用

eclipse中导入运行MyEclipse项目 进入项目目录&#xff0c;找到.project文件&#xff0c;打开找到<natures>...</natures>代码段。在第2步的代码段中加入如下标签内容并保存&#xff1a; <nature>org.eclipse.wst.common.project.facet.core.nature</na…

mysql中获取一段时间日期

SELECTdate_add(date_sub(20230201, interval 1 day), INTERVAL (cast(help_topic_id AS signed INTEGER) 1) day) as tttt FROM mysql.help_topic WHERE help_topic_id < DATEDIFF(20230201, date_sub(20230101, interval 1 day)) ORDER BY help_topic_id其中mysql.help_t…

SpringMVC-HttpMessageConverter 报文信息转化器

文章目录 HttpMessageConverter一、概念二、RequestBody三、RequestEntity四、 ResponseBody1.返回JSON格式的字符串 五、RestController六、ResponseEntity HttpMessageConverter 一、概念 报文信息转化器&#xff0c;将请求报文转化为Java对象&#xff0c;或将Java对象转化…

Java笔记(死锁、线程通信、单例模式)

一、死锁 1.概述 死锁 : 死锁是指两个或两个以上的进程在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法往下执行。此时称系统处于死锁状态或系统产生了死锁&#xff0c;这些永远在互相等待的进…

【Digester解析XML文件的三种方式】

Digester解析XML文件的三种方式 1. Digester解析XML文件的三种方式1.1 作用及依赖jar包 2. 重点和难点3. XML文件4. 通过不同的方式解析这个xml文件4.1 通过java编码方式解析&#xff08;javabean存储&#xff09;4.2 通过java编码方式解析&#xff08;list和map存储&#xff0…

【ChatGPT 和文心一言哪个更好用?】

ChatGPT 和文心一言哪个更好用&#xff1f; 随着人工智能技术的飞速发展&#xff0c;AI 助手已经成为人们日常生活和工作中不可或缺的一部分。在众多 AI 助手中&#xff0c;ChatGPT 和文心一言备受关注。本文将从智能回复、语言准确性、知识库丰富度等方面对这两大 AI 助手进行…

Leetcode 俩数之和(哈希)

一、题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以…

【LMDeploy 大模型量化部署实践】学习笔记

参考学习教程【LMDeploy 的量化和部署】 理论 作业 使用 LMDeploy 以本地对话、网页Gradio、API服务中的一种方式部署 InternLM-Chat-7B 模型&#xff0c;生成 300 字的小故事 本地对话 API服务 Client 命令 端口转发 网页Gradio

一文学习Thrift RPC

Thrift RPC引言 Thrift RPC的特点 Thrift 是一个RPC的框架&#xff0c;和Hessian RPC有什么区别&#xff0c;最重要的区别是Thrift可以做异构系统开发。 什么是异构系统&#xff0c;服务的提供者和服务的调用者是用不同语言开发的。 为什么会当前系统会有异构系统的调用&…

【WPF.NET开发】WPF 中的 Layout

本文内容 元素边界框布局系统测量和排列子元素面板元素和自定义布局行为布局性能注意事项子像素渲染和布局舍入 本主题介绍 Windows Presentation Foundation (WPF) 布局系统。 了解布局计算发生的方式和时间对于在 WPF 中创建用户界面非常重要。 1、元素边界框 在 WPF 中构…

Apollo Cyber RT:引领实时操作系统在自动驾驶领域的创新

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下…

深入理解旅游网站开发:Java+SpringBoot+Vue+MySQL的实战经验

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

ChatGPT 全域调教高手:成为人工智能交流专家

随着人工智能的快速发展&#xff0c;ChatGPT作为一种强大的文本生成模型&#xff0c;在各行各业中越来越受到重视和应用。想要利用ChatGPT实现更加智能、自然的交流&#xff0c;成为 ChatGPT 全域调教高手吗&#xff1f;本文将为您介绍如何通过优化ChatGPT的训练方法&#xff0…

jquery多选框

使用hbuilder <!DOCTYPE html> <html><head><meta charset"GBK"><title></title></head><body><table id"myTable"> <tr> <td>黄1</td> </tr> <tr> <td>…

JAVA泛型、泛型通配符、综合练习

作用&#xff1a; 是 jdk5 中引入的特性&#xff0c;可以在编译阶段 约束 操作的数据类型&#xff0c;并进行检查。 格式&#xff1a; <数据类型> 注意泛型只能支持引用数据类型&#xff0c;基本数据类型可转成对应的包装类。 问题&#xff1a; 在没有泛型的时候&…

Redis的RDB和AOF详解

Redis的RDB和AOF详解 欢迎来到本博客&#xff0c;今天我们将深入探讨Redis中的RDB&#xff08;Redis DataBase&#xff09;和AOF&#xff08;Append Only File&#xff09;两种持久化机制。这两种机制在Redis中负责将内存中的数据持久化到硬盘&#xff0c;保障数据的持久性和可…

前端demo: 将传入文件压缩到不超过指定大小(M)

1.compressImage函数&#xff1a;通过canvas将选择文件压缩后展示在页面上 2.compressImageToSetsize函数&#xff1a;传入参数file, quality 0.6,setsize 1&#xff0c;借助compressorjs将传入文件压缩到不超过指定大小&#xff08;M&#xff09; 3.compressImageN&#x…