快速排序法(java版,分治法,递归)

AF3​​​​​​​ Msa、TemplateHit、HitMetadata类解读 Msa:处理 多序列比对 (MSA) 结果,为 AlphaFold3 提供 序列进化信息。 TemplateHit:存储 查询序列与模板结构的比对信息,用于 筛选模板。 HitMetadata:提供 比对模板的 PDB 结构信息,帮助 解析和使用模板数据。 阅读详情

快速排序法介绍:


快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过--趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
 

快速排序 法示意图:

 

快速排序法代码实现:

import java.util.Arrays;
import java.util.Random;

public class QuickSort {

    public static void main(String[] args) {


        //产生一个随机数组
        Random r = new Random();
        int arr[] = new int[20];
        for(int i=0;i<arr.length;i++){
            //让随机数有正有负
            if(r.nextInt()%2==0){
                arr[i] =-r.nextInt(300);
            }
            else {
                arr[i] =r.nextInt(300);
            }
        }
        System.out.println("排序前:"+Arrays.toString(arr));
        quickSort(arr, 0, arr.length - 1);
        System.out.println("排序后:"+Arrays.toString(arr));
    }




    public static void quickSort(int[] arr, int left, int right) {
        int l = left;//左下标
        int r = right;//右下标
        int pivot = arr[(left + right) / 2];//中轴值
        int temp=0; //临时存储变量
        while (l <= r) {
            while (arr[l]<pivot){
                l++;
            }
            while (arr[r]>pivot){
                r--;
            }
            if (l>=r){
                break;
            }
            //交换
            temp=arr[r];
            arr[r]=arr[l];
            arr[l]=temp;


            if (arr[l]==pivot){
                r--;
            }
            if (arr[r]==pivot){
                l++;
            }

        }

        if (l==r){
            l++;
            r--;
        }
        //向左递归
        if (left<r){
            quickSort(arr,left,r);
        }

        //向右递归
        if (right>l){
            quickSort(arr,l,right);
        }

    }

}

运行结果:

 

AI预测彩票,使用chatgpt和lstm神经网络(文末附源码) AI预测彩票,使用chatgpt和lstm神经网络(文末有彩蛋) 阅读详情

相关推荐

量化回测框架三选一:Backtrader、Zipline、PyAlgoTrade,新手到底该跟谁学?

本文对比分析了三大量化回测框架Backtrader、Zipline和PyAlgoTrade,帮助新手选择最适合的入门工具。从安装配置、策略编写到文档查阅,详细解析各框架的特点和适用场景,为量化交易初学者提供实用指南。

weixin_28745309的博客 268

Java实现快速排序详解及注意事项

Java实现快速排序机器详细介绍和注意事

m0_73700925的博客 281

【运筹优化】VRPTW建模实战:Python+Gurobi求解带时间窗的车辆路径规划

本文详细介绍了如何使用Python和Gurobi求解带时间窗的车辆路径问题(VRPTW)。通过将物流调度难题抽象为混合整数规划模型,并逐步讲解建模、编码与求解过程,为读者提供了从理论到实践的完整指南,帮助解决物流配送中的路径优化挑战。

peace的博客 201

Java-快速排序(递归)

Java-快速排序(递归)

apple_60803036的博客 858

aubo i5 + realsense D435i识别抓取实践二

aubo i5 + realsense D435i识别抓取实践二前言一、手眼标定是什么?二、标定软件安装1.aruco_ros安装2.vision_visp安装3.easy_handeye安装4.realsense驱动安装5.安装realsense ROS软件包三、配置1.launch文件修改2.打印二维码四、手眼标定1.启动launch文件2.标定步骤3.发布tf关系 前言 前面配置好了aubo机械臂的ROS软件包,机械臂可以正常运行后,接下来我们进行机械臂与相机的手眼标定。手眼标定分为eye_on_ha

转角 6373

DeepSeek跨会话协作指南:让AI成为你的「第二大脑」

通过DeepSeek的跨会话协作系统,用户实测工作效率提升63%。

紫夜若涵的博客 1475

java递归——快速排序(效率最高)

快速排序优化

qq_41369135的博客 642

Python代码加密与发布方案详解

本文详细介绍了多种Python代码保护方案,从基础加密到高级混淆,以及商业化发布的最佳实践。基础加密方案包括编译为字节码和使用PyArmor基础加密,适合临时保护和小项目。商业级加密方案如Cython编译和Nuitka完整打包,提供更高的保护强度和执行效率。高级混淆方案涉及控制流混淆、字符串加密和完整混淆工具链,进一步增加逆向难度。商业化发布方案则强调许可证系统集成、硬件绑定保护和完整发布流程。此外,文章还探讨了反逆向技术、最佳实践建议和常见问题解决方法。通过组合使用这些技术,可以构建出适合不同安全需求的P

数据知道的博客 1万+

Java 分治策略实现快速排序

Thought Divide: Partition the array into two subarrays around a pivot x such that elements in lower subarray ≤ x ≤ elements in upper subarray. Conquer: Recursively sort the subarrays. Combine: Trivia...

深刻的博客 1011

基于 Arduino 的鱼缸水质检测控制系统设计

本系统通过多传感器实时采集鱼缸水质参数(pH 值、温度、溶解氧、浊度),经 Arduino 主控芯片处理后,驱动执行模块自动调节水质,并通过显示模块实时展示数据。系统具备阈值报警、自动换水、温度调节、增氧等功能,适用于家庭或小型水族箱的水质智能管理。本设计提供了低成本、易扩展的鱼缸水质管理方案,适用于家庭水族箱或小型水产养殖场景,可根据实际需求调整传感器类型和控制逻辑。注:本设计如有疑问需要解惑可直接私信本人,看我个人简介。

weixin_42300449的博客 1086

【BUG已解决】RuntimeError: CUDA error: no kernel image is available for execution on the device 解决方案

方案适用场景推荐指数精确匹配官方版本绝大多数场景(大众消费卡+主流数据中心卡)⭐⭐⭐⭐⭐安装历史旧版本Pascal/Maxwell等老显卡⭐⭐⭐⭐安装Nightly版本刚发布的最新架构显卡⭐⭐⭐⭐源码编译官方各版本均不支持的特殊硬件⭐⭐Docker官方镜像追求省心、避免版本排查⭐⭐⭐⭐⭐的核心是PyTorch 预编译包不包含你显卡对应的计算能力架构先确认显卡真实计算能力),而不是盲目重装驱动对比 PyTorch 支持的架构列表),定位是否真的不匹配精确匹配官方版本。

博客 1万+

三种快速排序递归法(java)

快速排序1.0 public static void quickSort1(int[] arr) { if (arr == null || arr.length < 2) { return; } process1(arr,0,arr.length-1); } public static void process1(int[] arr, int L, int R) { if (L >= R) { return; } int M=

weixin_46422883的博客 1062

非结构化数据在大数据湖中的应用实践

想象一下,你正在整理一个杂乱的书房。有些书整整齐齐地放在书架上,每本书都有明确的标题、作者和出版日期——这些就是结构化数据,它们像数据库中的表格,有固定的格式和字段。但书房里还有更多东西:散落的照片、手写的笔记、录音带、视频光盘、甚至还有画作。这些物品没有固定的格式,每件都独一无二——这就是非结构化数据。在技术术语中,非结构化数据是指没有预定义数据模型或组织形式的信息。文本文档(Word、PDF、TXT)电子邮件和社交媒体内容图像和照片(JPG、PNG)音频文件(MP3、WAV)

软件工程实践的博客 361

【期末必刷】Java版算法设计与分析:分治法时间复杂度推导与主定理底层逻辑深度解析(附万字手写笔记与真题演练)

在计算机科学的宏伟殿堂中,分治法(Divide and Conquer)1 无疑是最具哲学意味且应用最广的算法设计范式之一。从基础的归并排序、快速排序,到高级的Strassen矩阵乘法、Karatsuba大数乘法,再到计算几何中的最近点对问题,分治法的身影无处不在。然而,在期末考试的答卷上,或者在顶级互联网公司的算法面试中,仅仅“知道”一个算法的时间复杂度是远远不够的。考官和阅卷老师真正想看到的,是你推导复杂度的严密逻辑链条。本文将彻底摒弃“填鸭式”的公式罗列,带你从第一性原理出发,一步步构建分治法时间复杂

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 125

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

快速排序

快速排序在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成了两个部分。 这种思路就叫做分治法。 元素的移动 选定了基准元素以后,我们要做的就是把其他元素当中小于基准元素的都移动到基准元素一边,大于基准元素的都移动到基准元素另一边。 挖坑法: import java.util.Arrays; public class QuickSort ...

李sir的博客 154

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

数据结构与算法-冒泡排序与快速排序

冒泡排序与快速排序冒泡排序思想优化冒泡过程的例子应用实例快速排序举例挖坑填坑法实现代码 冒泡排序思想 基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。 优化 因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在 排序过程中设置一个标志 flag 判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排 序写好后,在进行) 冒

玄霄 331

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

算法设计与分析——快速排序(分治法)

算法思想: 快速排序算法思想基于分治法思想之上,存在分解、解决这两步。 分解: 数组A[p…r]被划分为子数组A[p…q-1]和 A[q+1…r], A[p…q-1]中的每个元素都小于等于A[q],A[q+1…r]中的每个元素都大于等于A[q] q在划分时确定 解决: 通过递归调用快速排序算法,对子数组 A[q+1…r]和A[p…q-1]进行排序 算法伪码: QUICKSORT(A,p,r) ...

karin_0的博客 2560

冒泡排序、选择排序、递归排序跟快速排序

排序算法,基本的高级语言都有一些提供。C语言有qsort()函数,C++有sort()函数,java语言有Arrays类(不是Array)。用这些排序时,都可以写自己的排序规则。 Java API对Arrays类的说明是:此类包含用来操作数组(比如排序和搜索)的各种方法。 上面两句话话是对其他博客上的引用,不清楚是那篇了,所以就不贴地址了,其实除了数组,java对集合也有sort(...

sin_404的博客 352

快速排序算法的两种Java实现及图解

快速排序算法的两种Java实现及图解 十大经典排序算法中,感觉“快速排序算法”不太容易理解,这里简单做个笔记,利用图示直观的展示了其排序原理。 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 算法描述 快速排序使用分治法来把一个串(list)...

Leonardo_KY的博客 1421

快速排序(三数中值法)

 快速排序:快速排序的主要思想即是在待排序数组中找到一个枢纽元,作为参考将数组分为大于枢纽元与小于枢纽元两部分来处理,然后运用分治法的思想进行递归,在分出来的两部分中分别再取一个枢纽元进行参考作类似的处理。该算法的平均运行时间是O(NlogN),而最坏的情形时性能为O(N^2),由此可见该算法的性能取决于枢纽元的选取上,因此在此采用了三数中值法来对枢纽元进行选取,可以有效规避最坏的情形。 三...

折纸鹤 1万+

java 快速排序

快排的本质是分治的思想,首先选择一个基点,然后比基点小的放在数组的左边,比基点大的放在数组的右边。选择基点的方式有挖坑法和指针交换法,先说挖坑法, 设置两个指针left、right指向数列的最左元素和最右元素,把指针指向的元素和基准元素比较,如果比基准元素大,rigth向左移动,left指向的元素添入坑,中如果比基准元素小,left向右移动则把right指向的元素添入坑中 package...

qq_35578760的博客 155

算法——快速排序

# 前言 为了学习面试中常常要考察到的快速排序,在网上搜索了很多篇资料,才大致搞懂了快速排序的原理。现在作出总结,以防日后忘记。

赈川 341

快速排序的递归实现。 分治法。

快速排序。 快速排序虽然是一种不稳定的排序方法。(如果排序前有两个相等的数,那么快速排序之后这两个数的相对位置有可能发生改变。) 但是它有其他内排序无法企及的平均性能。 所以对待排序记录个数很大且原始记录随机排列的情况很是适用。 快速排序一般使用分治法来实现。即 先确定一个基准量,然后从尾巴开始比较元素数值和基准量的大小,一旦遇到数值小于基准量的元素就交换位置并从头开始比较......

我待C语言如初恋。 2841

漫画:什么是快速排序?

—————&nbsp; 第二天&nbsp; —————————————————同冒泡排序(什么是冒泡排序?)一样,快速排序也属于交换排序,通过元素之间的比较和交换位置来达到排序的目的。不同的是,冒泡排序在每一轮只把一个元素冒泡到数列的一端,而...

Move 181

c语言的快速排序,C语言实现快速排序法(分治法)

title: 快速排序法(quick sort)tags: 分治法(divide and conquer method)grammar_cjkRuby: true算法原理分治法的基本思想:将原问题分解为若干个更小的与原问题相似的问题,然后递归解决各个子问题,最后再将各个子问题的解组合成原问题的解。利用分治法可以将解决办法分为 “三步走” 战略:(1) 在数据集中选定一个元素作为“基准”(pivot...

weixin_39844481的博客 2016

快速排序算法递归和非递归的思路以及java实现

快速排序算法递归和非递归的思路以及java实现

橘生淮南 548
上一篇: 2.1.1操作系统(进程定义,组成,组织方式,特征,进程状态与转换,进程控制,原语)
下一篇: 2.1.2操作系统(进程通信 线程的概念和特点 多线程模型)
热爱编程的小白白
热爱编程的小白白 新星计划导师 新星计划导师
博客等级 码龄5年 11万+粉丝 243原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱编程的小白白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值