我叫:快速排序【JAVA】

1.自我介绍

1.快速排序是由东尼·霍尔所发展的一种排序算法。

2.快速排序又是一种分而治之思想在排序算法上的典型应用。

3.本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。

2.思想共享 

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

3.思路分析

  1. 从数列中挑出一个元素,称为 "基准"(pivot);

  2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;

  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;

  

4.实战分析

   public static void quickSort(int[] array, int left, int right) {int l = left; //左下标int r = right;//右下表int temp = 0; //临时变量//pivot 中轴值int pivot = array[(l + r) / 2];//让比pivot小的值放到左边,比pivot大的值放到右边while (l < r) {while (array[l] < pivot) {// 左边直到找到>=pivotl += 1;}while (array[r] > pivot) {// 右边直到找到<=pivotr -= 1;}if (l >= r) { //说明pivot左边的都<=pivot,右边的都>=pivotbreak;}//交换temp = array[l];array[l] = array[r];array[r] = temp;//如果交换完之后,发现arr[l]==pivot,r--;,前移if (array[l] == pivot) {r -= 1;}//如果交换完之后,发现arr[r]==pivot,l++;,前移if (array[r] == pivot) {l += 1;}}//如果l==r,l++;r--;否则栈溢出if (l == r) {l += 1;r -= 1;}//向左递归if (left < r) {quickSort(array, left, r);}//向右递归if (right > l) {quickSort(array, l, right);}}

5.心惊胆战的执行一下

       int[] arr = new int[]{-9, 78, 0, 23, -567, 70};quickSort(arr, 0, arr.length - 1);System.out.println(Arrays.toString(arr));

 

 

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

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

相关文章

【iOS】数据持久化(二)之归档和解档(iOS 13以后)

在之前介绍的数据存储方法中&#xff0c;不管是NSUserDefaults还是plist文件都不能对自定义对象进行存储&#xff0c;OC提供的解归档恰好解决了这个问题 本片文章对 iOS13 以后的版本 归档和解档 进行介绍。老版本的解归档见这篇文章&#xff1a;【iOS】文件&#xff08;对象数…

Python Anaconda创建虚拟环境及Pycharm使用虚拟环境

目录 前言 一、Anaconda与Pycharm 二、conda常用命令 三、Pycharm使用虚拟环境 总结 前言 我们在做开发任务时可能会创建多个项目&#xff0c;这些项目可能会依赖于不同的Python环境。比如有的用到Python3.6、有的用到Python3.7&#xff1b;有的用Pytorch开发、有的用Tens…

解决:ImportError: cannot import name ‘Sequence‘ from ‘collections‘

解决&#xff1a;ImportError: cannot import name ‘Sequence‘ from ‘collections‘ 背景 在使用之前的代码时&#xff0c;报错&#xff1a; File “G:\research\code\MicroDE_py\plot_bcic_iv_4_ecog_trial.py”, line 262, in from skorch.helper import predefined_spl…

Java 数据结构篇-实现单链表核心API

&#x1f525;博客主页&#xff1a; 小扳_-CSDN博客 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 单链表的说明 2.0 单链表的创建 2.1 单链表 - 头插节点 2.2 单链表 - 遍历 2.2.1 使用简单的 for/while 循环 2.2.2 实现 forEach 方法 2.2.3 实现迭代器的方法 2.…

UE5 中的computer shader使用

转载&#xff1a;UE5 中的computer shader使用 - 知乎 (zhihu.com) 目标 通过蓝图输入参数&#xff0c;经过Compture Shader做矩阵运算 流程 1. 新建插件 2. 插件设置 3. 声明和GPU内存对齐的参数结构 4. 声明Compture Shader结构 5. 参数绑定 6. 着色器实现 7. 分配 work gr…

VueRouter

路由介绍 1.思考 单页面应用程序&#xff0c;之所以开发效率高&#xff0c;性能好&#xff0c;用户体验好 最大的原因就是&#xff1a;页面按需更新 比如当点击【发现音乐】和【关注】时&#xff0c;只是更新下面部分内容&#xff0c;对于头部是不更新的 要按需更新&#…

Git 基本使用命令

Git 基本使用命令 下面是一些常用的 Git 基本使用命令&#xff1a; 初始化一个新的 Git 仓库&#xff1a; git init克隆&#xff08;Clone&#xff09;一个远程仓库到本地&#xff1a; git clone <repository_url>添加文件或目录到暂存区&#xff08;Staging Area&am…

微信小程序前端环境搭建

搭建微信小程序前端环境 申请小程序测试账号 访问路径 使用微信扫描二维码进行申请&#xff0c;申请成功之后&#xff0c;进入界面&#xff0c;获取小程序ID(AppID)和秘钥(AppSecret) 安装微信web开发者工具 访问路径 选择稳定开发的版本 需要在小程序的设置中将默认关闭…

geoserver发布tif矢量数据图层

cesium加载上传至geoserver的tif矢量数据_cesium加载tiff-CSDN博客 geoserver安装及跨域问题解决方案&#xff1a;geoserver安装及跨域问题解决方案_geoserver 跨域_1 1王的博客-CSDN博客 将TIF上传至geoserver 启动geoserver服务&#xff0c;并进入geoserver主页。 1. 新建…

【物联网产品架构】如何构建物联网产品路线图

面对现实吧。建立物联网产品路线图难度要比为“正常”技术产品制定路线图要困难得多。 这是因为IoT产品是复杂的系统。为了创建一个工作的解决方案&#xff0c;物联网技术栈的所有层 - 设备硬件&#xff0c;设备软件&#xff0c;通信&#xff0c;云平台和云应用都需要一起工作。…

Spring Cloud五大组件

Spring Cloud五大组件 Spring Cloud是分布式微服务架构的一站式解决方案&#xff0c;在Spring Boot基础上能够轻松搭建微服务系统的架构。 现有Spring Cloud有两代实现&#xff1a; 一代&#xff1a;Spring Cloud Netflix&#xff0c;主要由&#xff1a;Eureka、Ribbon、Feig…

【c语言】 逻辑运算符运算规则

1.&&逻辑运算符的坑 int x0&#xff0c;y0&#xff0c;z0; z (x1) && (y2); printf("%d"&#xff0c;y);//y0;今天遇到了同学问的问题&#xff0c;为什么y输出为0. 我第一时间也记不得&#xff0c;工作中一般不会写这种代码&#xff0c;但是却不能…

Vue3 状态管理 - Pinia

1. 什么是Pinia Pinia 是 Vue 的专属的最新状态管理库 &#xff0c;是 Vuex 状态管理工具的替代品 提供更加简单的APl&#xff08;去掉了mutation&#xff0c;Pinia 中对state数据的修改可以直接通过action&#xff0c;Vuex中则是通过mutation)提供符合组合式风格的API&#…

笔记转移:https://www.yuque.com/u32968635/lbk

语雀&#xff1a;https://www.yuque.com/u32968635/lbk

视频剪辑技巧:如何高效批量转码MP4视频为MOV格式

在视频剪辑的过程中&#xff0c;经常会遇到将MP4视频转码为MOV格式的情况。这不仅可以更好地编辑视频&#xff0c;还可以提升视频的播放质量和兼容性。对于大量视频文件的转码操作&#xff0c;如何高效地完成批量转码呢&#xff1f;现在一起来看看云炫AI智剪如何智能转码&#…

Servlte+JSP企业内容管理系统

企业内容管理系统的设计与实现 1&#xff0e;系统概述: 随着企事业单位信息化的建设&#xff0c;内联网和外联网之间的信息交互越来越多,优秀的内容管理系统对企业内部来说&#xff0c;能够很好地做到信息的收集和重复利用及信息的增值利用。对于外联网来说,内容管理系统可使…

6 Go的切片

概述 在上一节的内容中&#xff0c;我们介绍了Go的数组&#xff0c;包括&#xff1a;声明数组、初始化数组、访问数组元素等。在本节中&#xff0c;我们将介绍Go的切片。在Go语言中&#xff0c;数组的长度是固定的&#xff0c;不能改变&#xff0c;这在某些场景下使用不太方便。…

【C++】一文简练总结【多态】及其底层原理&具体应用(21)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.多态的概念二.多态的实现1&#xff…

【C++】:拷贝构造函数与赋值运算符重载的实例应用之日期类的实现

C实现日期类 ├─属性&#xff1a; │ ├─年份 │ ├─月份 │ └─日期 ├─方法&#xff1a; │ ├─构造函数 │ ├─拷贝构造函数 │ ├─析构函数 │ ├─设置年份 │ ├─设置月份 │ ├─设置日期 │ ├─获取年份 │ ├─获取月份 │ ├─获取日期 │ ├…

websocket和mqtt

WebSocket是一种通信协议&#xff0c;它允许在浏览器和服务器之间建立持久连接&#xff0c;并允许双向传递数据。MQTT则是一种轻量级的发布/订阅消息传输协议&#xff0c;常用于物联网(IoT)设备之间的通信。 &#xff08;1&#xff09;js能直接实现mqtt吗&#xff0c;还是需…