java实现快速排序(图)

2023-11-04

快速排序

快速排序是对冒泡排序的一种改进, 它是不稳定的。由C. A. R. Hoare在1962年提出的一种划分交换排序,采用的是分治策略(一般与递归结合使用),以减少排序过程中的比较次数,它的最好情况为O(nlogn),最坏情况为O(n^2),平均时间复杂度为O(nlogn)。

基本思想

选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以达到全部数据变成有序。
在这里插入图片描述

代码实现

package com.sorttext;

import java.util.Arrays;

public class QuickSort {
    public static void main(String[] args) {
        int[] arr = {5, 4, 9, 3};
        chage(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

    /**
     * 快速排序
     * @param arr 数组    
     * @param left 左指针
     * @param right 右指针
     */
    public static void chage(int[] arr, int left, int right) {
        if (left > right) {//
            return;
        }
        int i = left;
        int j = right;
        int key = arr[left];
        int temp = 0;
        while (i != j) {
            while (arr[j] >= key && i < j) {
                j--;
            }
            while (arr[i] <= key && i < j) {
                i++;
            }
            //走到这说明 两个数字都找到了 有可能是两个数字 一大一小交换
            //也有可能是一个数字 i与j重合了 自身交换位置不变
            //跳出循环以后 让当前重合坐标与基点 做交换
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        //走到这说明 j与i重合 让当前值与基点 做交换
        arr[left] = arr[i];
        arr[i] = key;

        //在分别 做左右递归
        chage(arr, left, i - 1);
        chage(arr, j + 1, right);//注意此处最后一个参数不能用length-1
    }
}

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

java实现快速排序(图) 的相关文章

随机推荐

  • GB 9706.1-2020和GB9706.1-2007对照表

    GB 9706 1 2020和GB9706 1 2007对照表 目录 GB 9706 1 2020和GB9706 1 2007对照表 新版GB 9706 1 2020标准基本情况及主要变化 pptx 原创力文档 关于发布GB 9706 1新
  • 自用工具 猴子都会用的UNITY文件浏览器(浏览文件夹)

    获取插件 效果图 支持按名称排序 按类别排序 关键词搜索 提供的接口 Vector3 最后UI位置 方便定做滑动菜单定位首尾 Bool 是否开启类别排序 可以重写该布尔值来达成切换排序方式的功能 Bool 刷新 调用这个布尔值可以刷新本插件
  • SOC基本知识

    1 什么是soc SOC称为系统级芯片 也称片上芯片 是一个专有目标的集成电路的产品 其中包括完整系统并有嵌入软件的全部内容 目前SOC更多的集成处理器 包括CPU GPU DSP 存储器 基带 各种接口控制模块 各种互联总线等 其典型代表
  • 解决问题记录7:kettle9.1在mysql中生成资源库问题

    使用kettle9 1在mysql生成资源库时 遇到了个问题 问题产生及解决步骤如下 1 kettle主页右上角没有 connect 下拉选项 解决方式一 删除下图路径下的repositories文件 然后重启kettle就可以了 解决方式
  • vue自定义指令 - v-load

    vue自定义指令 v load 前言 原理 实现方法 一 注册指令 二 实现指令逻辑 三 页面效果 前言 懒加载是一种网页性能优化的方式 它能极大的提升用户体验 图片一直是影响网页性能的主要元凶 现在一张图片超过几兆已经是很经常的事了 如果
  • EPOLLRDHUP事件是干啥的???

    EPOLLRDHUP是从Linux内核2 6 17开始由GNU引入的事件 当socket接收到对方关闭连接时的请求之后触发 有可能是TCP连接被对方关闭 也有可能是对方关闭了写操作 如果不使用EPOLLRDHUP事件 我们也可以单纯的使用E
  • 通讯协议1

    协议 就是约定 就好比我们现在说的是普通话 网络通信协议 速率 传输码率 代码传输结构 传输控制等 大事化小 分层的概念 TCP IP 协议簇 实际上是一组协议 重要 TCP 用户传输协议 UDP 用户数据报协议 出名的协议 TCP IP
  • Burp+sqlmap测试SQL注入

    免责声明 此文章仅用于学习研究使用 请勿用于违法犯罪 请遵守 网络安全法 等相关法律法规 Burp sqlmap测试SQL注入 本文主要讲述Burp和sqlmap工具联动测试SQL注入 环境准备 具有python环境 系统中有sqlmap
  • 如何申请安卓证书,申请安卓证书的流程是什么?

    用HBuilderX打包安卓正式app时 我们需要使用自有证书 安卓证书是免费申请的 虽然HBuilderX有申请教程 为了自己后期使用方便 今天给大家分享下详细的申请教程 HBuilderX的文档 https ask dcloud net
  • iphone固件降级_iphone 6s如何降级ios10.3.3【降级方法】

    iphone6s如何降级ios10 3 3 相信小伙伴们一定很好奇 下面小编为大家带来了iphone6s的ios10 3 3降级方法介绍 感兴趣的小伙伴赶紧跟着小编一起来看看吧 陆续有用户报告称苹果关闭了iPhone 6s的iOS 10 3
  • Quartus安装Altera USB-Blaster安装驱动程序出现问题(代码39)的解决办法

    在Windows11的平台下 Quartus安装Altera USB Blaster驱动时会出现问题 有如下提示 Windows在安装设备的驱动程序时遇到问题 Windows已找到设备的驱动程序 但在尝试安装它们时遇到错误 Windows无
  • yolov5代码--注释

    yolov5目录结构 yolov5 detect py代码详解 https blog csdn net CharmsLUO article details 123422822 spm 1001 2014 3001 5506 yolov5 t
  • c语言n的阶乘

    n的阶乘定义就是如同这样的 1 2 3 4 n 从一开始 到你需要的那个数字 思路如下 1 可选择有递归或者非递归的方法进行完成 2 理情思路 思考如何进行累 3 非递归代码如下 int main int n 0 scanf d n int
  • 哈希函数(散列函数)详解

    哈希函数 散列函数 详解 Hash 一般翻译做 散列 也有直接音译为 哈希 的 就是把任意长度的输入 又叫做预映射 pre image 通过散列算法 变换成固定长度的输出 该输出就是散列值 这种转换是一种压缩映射 也就是 散列值的空间通常远
  • 没wifi没网也能用App!10分钟干洗机来了……硅谷初创公司在做啥?

    硅谷Live 实地探访 热点探秘 深度探讨 最近小探跟身边创业的朋友们聊天 大家都纷纷表示现在创业太 南 了 巨头们各占鳌头睥睨市场 对于新点子行动力迅速且 有钱有闲 不怕失败 谷歌创新坟场里项目堆积如山 Facebook 亚马逊等大公司业
  • Zabbix 监控httpd

    两台 虚拟机 一台服务端 一台客户端都要下载zabbix源 两台虚拟机都要下载 rpm Uvh https repo zabbix com zabbix 5 0 rhel 7 x86 64 zabbix release 5 0 1 el7
  • Dubbo微服务调用时公共参数的传递

    在业务开发中 有时会将一些通用参数放在Header中进行传递 后端可以通过http的getHeader 方法来获取所需的公共参数 但当该A服务调用RPC接口请求B服务时 http请求中的Header并不会随RPC请求带入到B服务中 这时可以
  • 汉明窗口Hamming Window

    1 汉明窗口 Hamming Window 汉明窗口 Hamming Window 是一种常用的数字信号处理技术 它在测高卫星中被用于处理合成孔径雷达 Synthetic Aperture Radar SAR 信号 在合成孔径雷达中 为了提
  • 分布式下的一致性协议介绍 2pc 3pc paxos zab

    2PC 翻译过来叫两阶段提交算法 它本身是一致强一致性算法 所以很适合用作数据库的分布式事务 其实数据库的经常用到的TCC本身就是一种2PC 首先第一阶段叫准备节点 事务管理器把事务的请求都发送给一个个的资源 这里的资源可以是数据库 也可以
  • java实现快速排序(图)

    快速排序 快速排序是对冒泡排序的一种改进 它是不稳定的 由C A R Hoare在1962年提出的一种划分交换排序 采用的是分治策略 一般与递归结合使用 以减少排序过程中的比较次数 它的最好情况为O nlogn 最坏情况为O n 2 平均时