第 7 章 排序算法(6)(快速排序)

7.9快速排序

7.9.1快速排序法介绍:

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

7.9.2快速排序法示意图:

在这里插入图片描述
在这里插入图片描述

7.9.3快速排序法应用实例:

要求: 对 [-9,78,0,23,-567,70] 进行从小到大的排序,要求使用快速排序法。【测试8w和800w】
说明[验证分析]:
1)如果取消左右递归,结果是 -9 -567 0 23 78 70
2)如果取消右递归,结果是 -567 -9 0 23 78 70
3)如果取消左递归,结果是 -9 -567 0 23 70 78
4)代码实现

快速排序

import java.util.Arrays;/*** 快速排序*/
public class QuickSort {public static void main(String[] args) {int[] arr = {-9, 78, 0, 23, -567, 70};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;//右下标//pivot中轴值int pivot = arr[(left + right) / 2];int temp = 0;//临时遍历,作为交换时使用//while循环的目的是,让比pivot值 小的,放到左边//比pivot值大的,放到右边while (l < r) {//在pivot的左边一直找,找到大于等于pivot值,才退出while (arr[l] < pivot) {l += 1;}//在pivot的右边一直找,找到小于等于pivot值,才退出while (arr[r] > pivot) {r -= 1;}//如果 l >= r ,说明pivot的左右两的值,已经按照左边全部是//小于等于pivot值,右边全部是大于等于pivot值if (l >= r) {break;}//交换temp = arr[l];arr[l] = arr[r];arr[r] = temp;//如果交换完后,发现这个arr[l] == pivot值,相等 r--, 前移if (arr[l] == pivot) {r -= 1;}//如果交换完后,发现这个arr[r] == pivot值,相等 l++, 后移if (arr[l] == pivot) {l += 1;}}//如果 l == r, 必须 l++, r--,否则会出现栈溢出if (l == r) {l += 1;r -= 1;}//向左递归if (left < r) {quickSort(arr, left, r);}//向右递归if (right > l) {quickSort(arr, l, right);}}
}
排序前:[-9, 78, 0, 23, -567, 70]
排序后:[-567, -9, 0, 23, 70, 78]

测试速度

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;/*** 快速排序*/
public class QuickSort {public static void main(String[] args) {//测试快速排序的速度, 给80000个数据 测试int arr[] = new int[80000];for (int i = 0, size = arr.length; i < size; i++) {arr[i] = (int) (Math.random() * 80000);//生成一个【0,80000)数}long startTime = System.currentTimeMillis();quickSort(arr, 0, arr.length - 1);long endTime = System.currentTimeMillis();SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String start = dateFormat.format(new Date(startTime));String end = dateFormat.format(new Date(endTime));System.out.println("排序前时间:" + start);// 2023-08-20 15:11:38System.out.println("排序后时间:" + end);// 2023-08-20 15:11:38}public static void quickSort(int[] arr, int left, int right) {int l = left;//左下标int r = right;//右下标//pivot中轴值int pivot = arr[(left + right) / 2];int temp = 0;//临时遍历,作为交换时使用//while循环的目的是,让比pivot值 小的,放到左边//比pivot值大的,放到右边while (l < r) {//在pivot的左边一直找,找到大于等于pivot值,才退出while (arr[l] < pivot) {l += 1;}//在pivot的右边一直找,找到小于等于pivot值,才退出while (arr[r] > pivot) {r -= 1;}//如果 l >= r ,说明pivot的左右两的值,已经按照左边全部是//小于等于pivot值,右边全部是大于等于pivot值if (l >= r) {break;}//交换temp = arr[l];arr[l] = arr[r];arr[r] = temp;//如果交换完后,发现这个arr[l] == pivot值,相等 r--, 前移if (arr[l] == pivot) {r -= 1;}//如果交换完后,发现这个arr[r] == pivot值,相等 l++, 后移if (arr[l] == pivot) {l += 1;}}//如果 l == r, 必须 l++, r--,否则会出现栈溢出if (l == r) {l += 1;r -= 1;}//向左递归if (left < r) {quickSort(arr, left, r);}//向右递归if (right > l) {quickSort(arr, l, right);}}
}

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

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

相关文章

leetcode 823. 带因子的二叉树(dp+双指针+Long类型)

leetcode 823. 带因子的二叉树(dp双指针Long类型) 题目表述 给出一个含有不重复整数元素的数组 arr &#xff0c;每个整数 arr[i] 均大于 1。 用这些整数来构建二叉树&#xff0c;每个整数可以使用任意次数。其中&#xff1a;每个非叶结点的值应等于它的两个子结点的值的乘积…

OpenAI发布ChatGPT企业级版本

本周一&#xff08;2023年8月28日&#xff09;OpenAI 推出了 ChatGPT Enterprise&#xff0c;这是它在 4 月份推出的以业务为中心的订阅服务。该公司表示&#xff0c;根据新计划&#xff0c;不会使用任何业务数据或对话来训练其人工智能模型。 “我们的模型不会从你的使用情况中…

7.接着跑一下triton官方教程

5.Model Ensemble 在此示例中&#xff0c;我们将探索使用模型集成来仅通过单个网络调用在服务器端执行多个模型。这样做的好处是减少了在客户端和服务器之间复制数据的次数&#xff0c;并消除了网络调用固有的一些延迟。 为了说明创建模型集成的过程&#xff0c;我们将重用第…

2023年8月30日-[SWPUCTF 2021 新生赛]jicao

<?php highlight_file(index.php); include("flag.php"); $id$_POST[id]; $jsonjson_decode($_GET[json],true); if ($id"wllmNB"&&$json[x]"wllm") {echo $flag;} ?> 包含了flag.php文件&#xff0c;设定了一个POST请求的id和…

c++ qt--事件过滤(第七部分)

c qt–事件过滤&#xff08;第七部分&#xff09; 一.为什么要用事件过滤 上一篇博客中我们用到了事件来进行一些更加细致的操作&#xff0c;如监控鼠标的按下与抬起&#xff0c;但是我们发现如果有很多的组件那每个组件都要创建一个类&#xff0c;这样就显得很麻烦&#xff…

【DRONECAN】(三)WSL2 及 ubuntu20.04 CAN 驱动安装

【DRONECAN】&#xff08;三&#xff09;WSL2 及 ubuntu20.04 CAN 驱动安装 前言 这一篇文章主要介绍一下 WSL2 及 ubuntu20.04 CAN 驱动的安装&#xff0c;首先说一下介绍本文的目的。 大家肯定都接触过 ubuntu 系统&#xff0c;但是我们常用的操作系统都是 Windows&#x…

Canvas实现3D效果

3D 球 效果图 代码 var canvas document.getElementById("cas"),ctx canvas.getContext("2d"),vpx canvas.width / 2,vpy canvas.height / 2,Radius 150,balls [],angleX Math.PI / 1000,angleY Math.PI / 1000,factor 0.0001 //旋转因子var An…

Linux命令查看CPU、内存、IO使用情况简单介绍

文章目录 1. CPU相关介绍1.1 物理CPU1.2 物理CPU内核1.3 逻辑CPU1.4 几核几线程1.5 CPU设计图 2. top 查看系统负载、CPU使用情况2.1 系统整体的统计信息2.2 进程信息2.3 top命令使用 3. lscpu 显示有关 CPU 架构的信息4. free 查看内存信息5. iostat 查看io信息 1. CPU相关介绍…

PCL 判断两条线段的平行性(三维空间)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里使用一种比较有趣的方式来判断三维空间中两条线段的平行性,我们都知道两条线段所代表的矢量进行叉乘计算所得数值,代表了由这两条线段组成的平行四边形的面积值,如下图所示: ok,那么如果将此结论推广到三维…

juicefs源码format命令阅读

之前博文中介绍过在windows下安装GO和vscode windows下安装go环境 和vscode中go扩展调试 1、获取源码 git clone https://github.com/juicedata/juicefs.git 首先观察代码架构 上图是我已经编译过得代码&#xff0c;可能和刚git下来的有些出入。 2、编译 我是在windows上进…

Mysql优化原理分析

一、存储引擎 1.1 MyISAM 一张表生成三个文件 xxx.frm&#xff1a;存储表结构xxx.MYD&#xff1a;存储表数据xxx.MYI&#xff1a;存储表索引 索引文件和数据文件是分离的&#xff08;非聚集&#xff09; select * from t where t.col1 30; 先去t.MYI文件查找30对应的索引…

【设计模式--原型模式(Prototype Pattern)

一、什么是原型模式 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它的主要目的是通过复制现有对象来创建新的对象&#xff0c;而无需显式地使用构造函数或工厂方法。这种模式允许我们创建一个可定制的原型对象&#xff0c;然后通过复制…

ChatRWKV 学习笔记和使用指南

0x0. 前言 Receptance Weighted Key Value&#xff08;RWKV&#xff09;是pengbo提出的一个新的语言模型架构&#xff0c;它使用了线性的注意力机制&#xff0c;把Transformer的高效并行训练与RNN的高效推理相结合&#xff0c;使得模型在训练期间可以并行&#xff0c;并在推理…

GP服务使用本地上传的文件进行分析

1、需求&#xff1a; 自己选择本地的文件上传在gp服务中进行分析&#xff0c;例如实现这个需求&#xff1a; 2、遇到的困境 发布创建TIN工具时要输入值表&#xff0c;但是我这里选择了本地的SHP文件和高程值后&#xff0c;发布出去就是一个常量值了&#xff0c;没法自己选择文…

Python 接口测试之接口关键字封装

引言 我们使用RF做UI自动化测试的时候&#xff0c;使用的是关键字驱动。同样&#xff0c;Python做接口自动化测试的时候&#xff0c;也可以使用关键字驱动。但是这里并不是叫关键字驱动&#xff0c;而是叫数据驱动。而接口测试的关键字是什么呢&#xff1f; 我们数据驱动的载体…

匠心新品:大彩科技超薄7寸WIFI线控器发布,热泵、温控器、智能家电首选!

一、产品介绍 此次发布一款7寸高清全新外壳产品&#xff0c;让HMI人机界面家族再添一新成员。该产品相比其他外壳有以下5个大改动&#xff1a; 1 表面玻璃盖板使用2.5D立体结构&#xff1b; 2 液晶盖板采用一体黑设计&#xff0c;且液晶屏与触摸板是全贴合结构&#xff1b; …

Qt5升级到Qt6分步迁移教程

Qt框架的一个新的长期支持版本6.5最近发布。它为以前的版本引入了许多修复、改进和新功能。有些可能对您的应用程序有用&#xff08;如果不是现在&#xff0c;可能会在将来&#xff09;&#xff0c;因此最好将应用程序迁移到最新版本的框架。 仍然有许多应用程序仍在使用Qt 5&…

自动驾驶和辅助驾驶系统的概念性架构(一)

摘要&#xff1a; 本文主要介绍包括功能模块图&#xff0c;涵盖了底层计算单元、示例工作负载和行业标准。 前言 本文档参考自动驾驶计算联盟(Autonomous Vehicle Computing Consortium)关于自动驾驶和辅助驾驶计算系统的概念系统架构。 该架构旨在与SAE L1-L5级别的自动驾驶保…

FC-TDIO51 HONEYWELL 关于霍尼韦尔过程解决方案

FC-TDIO51 HONEYWELL 关于霍尼韦尔过程解决方案 霍尼韦尔过程解决方案(HPS)宣布推出一款文档和变更管理软件&#xff0c;该软件将帮助其客户的工业控制系统的完整性。Honeywell Trace用自动化解决方案取代了纸质记录和电子表格。通过提供复杂系统交互的单一集成视图&#xff0…

分析系统 - 使用Python爬虫

在竞争激烈的市场环境中&#xff0c;了解和分析竞争对手的销售策略和市场表现对于企业的成功至关重要。本文将介绍如何利用Python爬虫建立低成本的销售竞争对手分析系统&#xff0c;探索其方法、工具和好处&#xff0c;并同时解决可能出现的问题。 销售竞争对手分析的目标是获取…