Java常见排序:(三)快速排序

2023-11-17

快速排序是一种非常快的交换排序方法,思路很简单,将待排的数据序列中任意取一个数据作为分界值,所有比这个值小的放在左边,比他大的放在右边。形成左右两个子序列,左边的值都比分界值小,右边的值都比分界大。接下来对左右两个子序列进行递归,两个子序列重新选择中心元素并按照上述规则调整,直到每个字序列中只剩一个元素。

快速排序 [时间复杂度:O(nlogn)、空间复杂度:O(log2n)、不稳定]

快速排序的具体实现代码

package com.wpl.mysort;

//实现快速排序
public class QuickSort {

	public static void quick_sort(int s[], int l, int r)  
	{  
	    if (l < r)  
	    {  
	        //将中间的这个数和第一个数交换 参见注1  
	        int i = l, j = r, x = s[l];  
	        while (i < j)  
	        {  
	            while(i < j && s[j] >= x) // 从右向左找第一个小于x的数  
	                j--;    
	            if(i < j)   
	                s[i++] = s[j];  
	              
	            while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数  
	                i++;    
	            if(i < j)   
	                s[j--] = s[i];  
	        }  
	        s[i] = x;  
	        quick_sort(s, l, i - 1); // 递归调用   
	        quick_sort(s, i + 1, r);  
	    }
	}
	    
	
	public static void main(String[] args) {
		int []test={23,2,34,8,34,28,98,89,13,8,33,56,75,67};
		quick_sort(test,0,test.length-1);
		for(int i=0;i<test.length;i++)
		{
			System.out.print(test[i]+" ");
		}
	}
	
}


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

Java常见排序:(三)快速排序 的相关文章

  • JAVA中sort()函数的使用方法的个人总结

    1 sort 函数的基本格式 默认排序为升序排序 Arrays sort int a int fromIndex int toIndex Arrays sort 数组名 起始下标 终止下标 一个简单的排序例子 import java uti
  • uva 120(排序,检索)

    题目 Stacks and Queues are often considered the bread and butter of data structures and find use in architecture parsing o
  • 几种排序算法比较

    前言 排序是按照关键字的非递减或非递增顺序对一组记录重新进行排列的操作 是对无规律的一组序列转化为递增或递减的操作 排序的稳定性 当排序记录中的关键字都部相同时 则任何一个记录的无序序列经过排序后得到的结果都唯一 反之 若存在两个或多个关键
  • Java对二维数组排序

    排序规则 首先按照每个一维数组第一个元素进行升序排序 若第一个元素相等 则按照第二个元素进行升序排序 Arrays sort a new Comparator
  • 【经典排序算法】希尔排序(动图演示 + C 语言代码实现)

    经典排序算法 希尔排序 动图演示 C 语言代码实现 经典排序算法 十大经典排序算法汇总篇 文章目录 经典排序算法 希尔排序 动图演示 C 语言代码实现 1 动图演示 2 排序思想 3 时间 空间复杂度 4 代码实现 C语言 1 动图演示 2
  • 基数排序-------C语言实现

    其他排序 堆排序 归并排序 插入排序和希尔排序 快速排序 冒泡排序和选择排序 基数排序 前备知识 注 我们知道 对于一个数如果我们想获取它得个位 只需对10取余 想获取十位的数 可以除10然后再对10取余 获取百位除100然后再对10取余
  • 常见的排序算法总结

    排序简介 简介 排序算法 英语 Sorting algorithm 是一种将一组特定的数据按某种顺序进行排列的算法 排序算法多种多样 性质也大多不同 性质 稳定性 稳定性是指相等的元素经过排序之后相对顺序是否发生了改变 拥有稳定性这一特性的
  • noip2007 奖学金 (排序)

    A1159 奖学金 时间限制 1 0s 内存限制 256 0MB 总提交次数 797 AC次数 339 平均分 60 95 将本题分享到 查看未格式化的试题 提交 试题讨论 试题来源 NOIP2007 普及组 问题描述 某小学最近得到了一笔
  • LeetCode 259. 3Sum Smaller(三数值和)

    原题网址 https leetcode com problems 3sum smaller Given an array of n integers nums and a target find the number of index tr
  • elasticsearch地理位置总结

    参考 https blog csdn net tang jian dong article details 104446526 https blog csdn net u013041642 article details 94416631
  • 经典排序算法:快速排序(Quick Sort)

    快速排序算法 快速排序算法被称为20世纪十大算法之一 是最重要的算法之一 是一定要掌握和熟练的 快速排序的基本思想是 分治法 1 先从数列中取出一个数作为基准数 2 分区过程 将比这个数大的数全放到它的右边 小于或等于它的数全放到它的左边
  • Basic Level 1055 集体照 (25分)

    题目 拍集体照时队形很重要 这里对给定的 N 个人 K 排的队形设计排队规则如下 每排人数为 N K 向下取整 多出来的人全部站在最后一排 后排所有人的个子都不比前排任何人矮 每排中最高者站中间 中间位置为 m 2 1 其中 m 为该排人数
  • 对所有数据类型可通用的快速排序算法

    1 引子 快速排序算法可能是最优秀的排序算法了 此算法是1960年C A Hoare发明出来的 它被列为20世纪十大算法之一 快速排序也属于广义上的冒泡排序 这是简单冒泡排序法的优化升级 两者都是通过比较大小 交换元素来排序的 不过它增大了
  • pgsql 自定义排序

    需求简述 用户要求查询数据表 使得输出结果指定中文字段chn name按照自定义的顺序 电 水 风 火等顺序排序 表内容 自定义排序sql 排序结果 工作中遇到的sql查询案例 如果有更简便的查询sql 欢迎多多交流
  • C语言实现快速排序与归并排序

    快排 代码如下 include
  • 力扣算法合集

    algo 鸡汤篇 排序算法 二叉树 哈希表 栈和队列 数组 链表 字符串 算法套路 双指针 排序 贪心思想 二分查找 搜索 动态规划 斐波那契数列 矩阵路径 数组区间 分割整数 最长递增子序列 01背包 股票交易 字符串编辑 算法题解 动态
  • 力扣每日一题——三角形的最大周长

    题目链接 class Solution public int largestPerimeter vector
  • 睿智的seq2seq模型1——利用seq2seq模型对数字进行排列

    睿智的seq2seq模型1 利用seq2seq模型对数字进行排列 学习前言 seq2seq简要介绍 利用seq2seq实现数组排序 实现方式 一 对输入格式输出格式进行定义 二 建立神经网络 1 神经网络的输入 2 语义编码c的处理 3 输
  • mysql按照某个字段值内容排序

    举个栗子 假如一个商品下 有多个货品 各个货品的状态值都不一样 那么当只想展示商品中的某一个货品时 希望用户端看到的优先级是在售的货品中的一个 根据mysql提供的方法 field column value1 value2 value3 可
  • List sort comparator按照自定义规则排序

    statusList I R N return N R I public String handStateGroup List

随机推荐

  • defineProperty和proxy区别

    1 不同点 区别一 defineProperty 是对属性劫持 proxy 是对代理对象 如果需要监听某一个对象的所有属性 需要遍历对象的所有属性并对其进行劫持来进行监听 Object keys data forEach key gt le
  • 重构——在对象之间搬移特性(2)

    Inline Class 某个类并没有做太多的事情 应该将这个类的所有特性搬移到另一个类中 然后移除原类 过程与Extract Class相反 不再做介绍 Hide Delegate 客户通过一个委托关系来调用另一个对象 应当在服务类上建立
  • 回顾 Spring

    什么是Spring spring是一个为了简化企业级开发 它是轻量级的 使用IoC AOP等进行开发的一站式框架 比如 控制反转 依赖注入 面向切面编程 spring事务管理 通过spring继承其他框架 Spring继承jdbc myba
  • Python入门之魔法方法

    魔法方法 魔法方法总是被双下划线包围 例如 init 魔法方法是面向对象的 Python 的一切 如果你不知道魔法方法 说明你还没能意识到面向对象的 Python 的强大 魔法方法的 魔力 体现在它们总能够在适当的时候被自动调用 魔法方法的
  • I2C之知(三)--I2C总线的字节格式、时钟同步和仲裁

    字节格式 发送到SDA线上的每个字节必须是8位 每次传输的字节数量是不受限制的 每个字节后必须跟着一个ACK应答位 数据从最高有效位 MSB 开始传输 如果从机要执行一些功能后才能接收或者发送新的完整数据 比如说服务一个内部中断 那么它可以
  • STM32实现水下四旋翼(六)传感任务2——姿态解算代码实现(使用角度传感器)

    目录 一 绪论 二 JY901B与JY GPSIMU角度传感器介绍 1 角度传感器简介 2 JY901B的IIC通讯协议 3 JY GPSIMU的串口通讯协议 三 STM32的IIC与串口读取三轴角度驱动程序 1 IIC读取JY901B角度
  • Wide&deep模型详解

    谷歌于2016年提出的Wide Deep模型 Wide Deep模型的主要思路正如其名 是由单层的Wide部分和多层的Deep部分组成的混合模型 其中 Wide部分的主要作用是让模型具有较强的 记忆能力 Deep部分的主要作用是让模型具有
  • 为什么选择SoilVUE10 土壤湿度和温度剖面传感器

    几十年来 时域反射仪 TDR 一直是测量土壤含水量的主要方法之一 简单地说 电磁脉冲是沿着棒 或波导 发送的 这些脉冲在沿波导的不同点被反射 在从电缆到波导的过渡处以及在波导的末端处反射最为强烈 然后记录脉冲的传播时间 脉冲传播时间的测量受
  • Taichi安装与应用

    1 Taichi安装 看到知乎大神的作品后 99行代码的 冰雪奇缘 https zhuanlan zhihu com p 97700605 便尝试使用了一下Taichi 在Taichi官网上写的Python3 6 或者 Python3 7
  • ios如何上传文件到服务器,ios通过ftp上传文件到服务器

    ios通过ftp上传文件到服务器 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 怎样上传文件到Windows操作系统云服
  • mysql唯一索引与null

    1 建表 CREATE TABLE test user id bigint 20 unsigned NOT NULL AUTO INCREMENT name varchar 255 NOT NULL age int 11 DEFAULT N
  • error getting endorser client for channel: endorser client failed to connect to XXX 问题的解决方案

    在启动hyperledger fabric 的示例程序 first network 的过程中遇到了 error getting endorser client for channel endorser client failed to co
  • mysql 根据id修改,一个id却修改了两条

    原来是因为前同事埋的坑 id用的不是bigint而是varchar hash碰撞 直接1557276925125128192和1557276925125128193id一起修改了 当id不连着的时候 又发现不了这个问题 id改成bigint
  • 图像验证码识别(四)——灰度化和二值化

    一 灰度化 灰度化应用很广 而且也比较简单 灰度图就是将白与黑中间的颜色等分为若干等级 绝大多数位256阶 在RGB模型种 黑色 R G B 0 与白色 R G B 255 那么256阶的灰度划分就是R G B i 其中i取0到255 从前
  • grub2各种手动命令引导教程(引导Ubuntu及安装镜像,arch Linux及安装镜像,Windows及winPE)

    手动引导ubuntu的iso镜像文件从而安装ubuntu grub gt 代表命令的开始 假设ubuntu镜像在U盘的第一个分区的根目录下即 hd0 1 ubuntu 18 04 desktop amd64 iso 手动引导下可以按TAB键
  • Java的线程同步 & 并发操作

    并发 CUP在同一时间或同一时段内只能执行一件事情 而不同时件执行时 切换得十分快速 因为CUP的频率非常高 切换的速度人根本感受不出来 同步 同步是多个任务进行时 按照一定的规律进行着 线程并发 同一时间间隔中 有多个线程在同时执行 就是
  • github使用,上传,上传失败解决方案----03

    1 首先登上github GitHub Where the world builds software GitHub 发现登不上 在设置中找到代理关掉他或者打开不断切换 我就是这么试的他就可以登录了 2 创建账号 首先创建账号 根据提示下一
  • 用python 分析微信好友信息并生成词云

    在知乎上偶然看到有人推荐itchart这个微信接口 抱着好奇的想法尝试了以下 果然非常好玩 官方链接 http itchat readthedocs io zh latest itchat 目录结构 get info py这个类用来爬取好友
  • 超详细Ubuntu安装Anaconda步骤+Anconda常用命令

    目录 1 下载Anconda安装包 方法1 网页手动下载 方法2 wget命令下载 2 安装Anaconda STEP1 使用bash命令安装Anaconda STEP2 阅读并接受安装协议 STEP3 确认安装位置 STEP4 初始化An
  • Java常见排序:(三)快速排序

    快速排序是一种非常快的交换排序方法 思路很简单 将待排的数据序列中任意取一个数据作为分界值 所有比这个值小的放在左边 比他大的放在右边 形成左右两个子序列 左边的值都比分界值小 右边的值都比分界大 接下来对左右两个子序列进行递归 两个子序列