java 算法之快速排序

2023-05-16

1、快速排序是一种比较高效的排序算法,采用“分而治之”的思想,通过多次比较和交换来实现排序,在一趟排序中把将要排序的数据分成两个独立的部分,对这两部分进行排序使得其中一部分所有数据比另一部分都要小,然后继续递归排序这两部分,最终实现所有数据有序。

2、快速排序图

3、Java 代码实现快速排序


public static void main(String[] args) {
    int[] arry = {9,8,7,6,5,4,3,2,1};
    quickSort(arry,0, arry.length-1);
    System.out.println(Arrays.toString(arry));
}
public static void quickSort(int[] arry,int left,int right){
    //运行判断,如果左边索引大于右边是不合法的,直接return结束次方法
    if(left>right){
        return;
    }
    //定义变量保存基准数
    int base = arry[left];
    //定义变量i,指向最左边
    int i = left;
    //定义j ,指向最右边
    int j = right;
    //当i和j不相遇的时候,再循环中进行检索
    while(i!=j){
        //先由j从右往左检索比基准数小的,如果检索到比基准数小的就停下。
        //如果检索到比基准数大的或者相等的就停下
        while(arry[j]>=base && i<j){
            j--; //j从右往左检索

        }
        while(arry[i]<=base && i<j){
            i++; //i从左往右检索
        }
        //代码走到这里i停下,j也停下,然后交换i和j位置的元素
        int tem = arry[i];
        arry[i] = arry[j];
        arry[j] = tem;


    }
    //如果上面while条件不成立就会跳出这个循环,往下执行
    //如果这个条件不成立就说明 i和j相遇了
    //如果i和j相遇了,就交换基准数这个元素和相遇位置的元素
    //把相遇元素的值赋给基准数这个位置的元素
    arry[left] = arry[i];
    //把基准数赋给相遇位置的元素
    arry[i] = base;
    //基准数在这里递归就为了左边的数比它小,右边的数比它大
    //排序基准数的左边
    quickSort(arry,left,i-1);
    //排右边
    quickSort(arry,j+1,right);

}  

4、这个是面试常考的算法之一,后续将继续更新剩下的几种。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java 算法之快速排序 的相关文章

随机推荐

  • python自动化测试(4)-使用第三方python库技术实现

    1 概述 关于测试的方法论 xff0c 都是建立在之前的文章里面提到的观点 xff1a 功能测试不建议做自动化接口测试性价比最高接口测试可以做自动化做好接口自动化 xff0c 一定要有透过界面看到数据本质的能力 后面所谈到的 测试自动化 也
  • 测试开发-怎么能忘记打卡呢-神器AppleScript

    写在前面 今天给大家介绍一款我自认为比较好用的东西 xff0c Mac OS 下的 AppleScript xff0c AppleScript像是 mac电脑给开发者留下的一个入口一样 xff0c 他不同于其他语言那么复杂 xff0c 可以
  • 自动化测试_Mac安装python+selenium

    1 下载安装 参照下文 https blog csdn net kacylining article details 60587484 https www zhihu com question 30496889 a 下载 pip https
  • 使用Postman实现批量接口执行自动化测试

    一 创建文件夹 1 点击 34 Collections 34 TAB进入 xff0c 再次点击 New Collection 按钮创建文件夹 示例图文 xff1a 二 定义变量及调用执行测试 xff0c 方便灵活调用 1 定义全局变量 xf
  • 真人踩过的坑,告诉你避免自动化测试常犯的10个错误

    虽然从自己的错误中学习也不错 xff0c 但从别人的错误中学习总是更好的 作为一个自动化测试人员 xff0c 分享常见的容易犯的10个错误 xff0c 可以从中吸取教训 xff0c 引以为鉴 一 必要时才自动化 新人小王接到为Web应用程序
  • linux上传下载网速脚本

    bin sh LANG 61 34 34 while true do up time1 61 96 ifconfig 1 grep 34 bytes 34 awk 39 print 6 39 awk F 39 print 2 39 96 d
  • 部门刚来的00后太卷,还没2年班,跳到我们公司起薪20k....

    都说00后躺平了 xff0c 但是有一说一 xff0c 该卷的还是卷 这不 xff0c 前段时间我们公司来了个00后 xff0c 工作都没两年 xff0c 跳槽到我们公司起薪18K xff0c 都快接近我了 后来才知道人家是个卷王 xff0
  • 在阿里我是如何当面试官的

    前言 由于疫情关系 xff0c 最近看到很多测试同学的工作情况内心还是蛮触动的 xff08 降薪 变相裁员 辞退等 xff09 可能这并不是当下一个普遍的现象 xff0c 但仍然使我感受到前端这碗青春饭不好混 于此同时联系我内推的同学很多都
  • 3月面试了一个4年的测试,一问三不知,还反怼我...

    最近看了很多简历 xff0c 很多候选人年限不小 xff0c 但是做的都是一些非常传统的项目 xff0c 想着也不能通过简历就直接否定一个人 xff0c 何况现在大环境越来 越难 xff0c 大家找工作也不容易 xff0c 于是就打算见一见
  • Jenkins参数化构建自动化测试

    测试人员在进行支付类型相关的场景测试过程中 xff0c 需要真实支付的金额较大 xff0c 测试过程中又难以控制测试支付成本 xff0c 无法确切的向公司申请测试备用金 那么问题来了 xff1a 在无法避免自掏腰包进行巨额支付测试时 xff
  • 运维实战 kubernetes(k8s) 之 service

    64 TOC 运维实战 kubernetes k8s 之 service 1 service 介绍 Service可以看作是一组提供相同服务的Pod对外的访问接口 借助Service xff0c 应用可以方便地实现服务发现和负载均衡 ser
  • 企业运维之 openstack 的私有网络以及图形化配置

    企业运维之 openstack 的私有网络以及图形化 1 私有网络2 图形化配置虚拟机3 封装镜像4 上传镜像5 块存储6 kolla ansible 在上一篇的基础上 xff0c 来继续完善 openstack 的相关配置 先将控制节点启
  • AD 软件的学习--基本操作

    一 界面认识 如果某个空间消失了就在设置中的VIEW进行一个复位 device 元器件 xff1b connector 连接器 库所在文件夹 原理图大小设置 二 基本过程 放元器件时 xff0c 空格键进行旋转 先选好元件 xff0c 摆在
  • ROS学习记录(三)C++与Python文件的配置

    本篇文章依托于赵虚左老师的ROS课程 xff0c 实现HelloWorld打印 xff0c 并安装VScode环境 课程链接 讲义链接 文章目录 前言一 基本操作过程1 先创建一个工作空间 xff1b 2 再创建一个功能包 xff1b 二
  • STM32学习笔记-SMT32使用HAL库UART中断方式使用

    目录 1 引言 2 配置 3 流程 1 引言 近来需要使用蓝牙模块 xff0c 再了解到蓝牙模块等无线模块许多使用串口透传 xff0c 便决定在研究一下串口UART 的使用方法 由于用的板子种类每次都不一样 xff0c 有F103 有G0
  • Jetson Nano-USB和HDMI无响应,无法开机问题+jetson nano的烧录记录

    问题描述 xff1a Jetson Nano USB和HDMI没输出 xff0c 电源Led正常绿灯 xff0c 但端口无供电 xff0c 无法正常使用和开机 经查阅相关资料 xff0c 初步猜测应该是系统崩溃了 xff0c 导致usb驱动
  • expect/spawn小记

    usr bin expect set timeout 3 spawn ssh l root 10 239 81 207 expect 34 passwd 34 send 34 123456 r 34 interact
  • 人脸识别(了解知识)

    上节课我们学习了 xff0c OpenCV的基础知识和基本的读取数据方法 这节课 xff0c 让我们继续来了解人脸识别的知识 一 xff0c 图片灰度转换 OpenCV 中有数百种关于在不同色彩空间之间转换的方法 当前 xff0c 在计算机
  • 医疗实验室信息管理系统源码(云LIS)

    云LIS系统源码是一种医疗实验室信息管理系统 xff0c 提供全面的实验室信息管理解决方案 它的主要功能包括样本管理 检测流程管理 报告管理 质量控制 数据分析和仪器管理等 云LIS源码技术说明 xff1a 技术架构 xff1a Asp N
  • java 算法之快速排序

    1 快速排序是一种比较高效的排序算法 xff0c 采用 分而治之 的思想 xff0c 通过多次比较和交换来实现排序 xff0c 在一趟排序中把将要排序的数据分成两个独立的部分 xff0c 对这两部分进行排序使得其中一部分所有数据比另一部分都