排序-快排算法对数组进行排序

目录

一、问题描述

二、解题思路

1.初始化

2.将右侧小于基准元素移到左边

3.将左侧大于基准元素移到右边

4.重复执行上面的操作

5.对分好的左、右分区再次执行分区操作

6.最终排序结果

三、代码实现

四、刷题链接


一、问题描述

二、解题思路

快排算法实现数组排序:快排的核心步骤是分区操作。

下面详细图解一次分区过程:

1.初始化

2.将右侧小于基准元素移到左边

赋值后相当于下面的情形:

3.将左侧大于基准元素移到右边

然后开始比较arr[low]和pivot的大小:(和上图作对比)

赋值后的数组为:

4.重复执行上面的操作

再次修改high(左移--),移动元素,再次修改low(右移++),移动元素;当low==high时停止,完成一次分区操作

5.对分好的左、右分区再次执行分区操作

分区返回的是中间元素位置,我们要对左、右两个子分区再次执行分区操作,每次分区都会确定一个中间位置(后序不会再变),当分区内元素都为1的时候,快排结束。

6.最终排序结果

三、代码实现

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 将给定数组排序* @param arr int整型一维数组 待排序的数组* @return int整型一维数组*/public int[] MySort (int[] arr) {// 使用快排排序QuickSort(arr,0,arr.length-1);return arr;}public int partition(int[] arr,int low,int high){int pivot=arr[low];//分界元素//System.out.println("low:"+low+",high:"+high);while(low<high){while(arr[high]>=pivot){//右侧元素大于pivot不移动if(low==high){break;}high--;}arr[low]=arr[high];//现在的arr[high]已经没有元素了while(arr[low]<=pivot){//左侧元素小于等于pivot不移动if(low==high){break;}low++;}arr[high]=arr[low];}//此时low位置就是初始的分界元素应该在的位置arr[low]=pivot;return low;}public void QuickSort(int[] arr,int low,int high){int pivotIndex=partition(arr,low,high);if(low<pivotIndex-1){QuickSort(arr,low,pivotIndex-1);}if(high>pivotIndex+1){QuickSort(arr,pivotIndex+1,high);}}
}

快排算法里面要注意边界条件,这个好好思考一下。

如果考研的话可以写伪代码,边界条件可以考虑的少一点

排序算法相关代码-CSDN博客文章浏览阅读108次。【代码】排序算法相关代码。https://blog.csdn.net/hehe_soft_engineer/article/details/134235961下面是之前写的排序算法的C++实现,属于伪代码,应试的话可以参考一下:

四、刷题链接

排序_牛客题霸_牛客网

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

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

相关文章

内存EDAC的内核支持情况

Linux内核对EDAC&#xff08;Error Detection and Correction&#xff09;支持的发展体现了对硬件错误管理和系统可靠性的持续重视。 EDAC作为Linux内核的一部分&#xff0c;其早期集成主要集中在基本的内存错误检测和纠正功能上&#xff0c;为ECC内存提供了基础支持。随着内核…

算法 | 拯救小a之如何获取多行数据

小a生活在一个只有26个小写字母的文本里&#xff0c;我们知道在26个小写字母里&#xff0c;a是字典序最小的&#xff0c;所以小a十分的自卑&#xff0c;今天小a实在是受不了了&#xff0c;他想和伙伴们一起逃出这个文本&#xff0c;在逃出之前&#xff0c;他想问问你&#xff0…

力扣每日一题130:被围绕的区域

题目 中等 相关标签 相关企业 给你一个 m x n 的矩阵 board &#xff0c;由若干字符 X 和 O &#xff0c;找到所有被 X 围绕的区域&#xff0c;并将这些区域里所有的 O 用 X 填充。 示例 1&#xff1a; 输入&#xff1a;board [["X","X","X"…

从GPU到ASIC,博通和Marvell成赢家

ASIC市场上&#xff0c;博通预计今年AI收入将达到110亿美元以上&#xff0c;主要来自与Google和Meta的合作&#xff1b;Marvell预计2028年AI收入将达到70亿至80亿美元&#xff0c;主要来自与Amazon和Google的合作。 随着芯片设计和系统复杂性的增加&#xff0c;科技大厂将更多地…

主成分分析

主成分分析&#xff08;Principal Component Analysis&#xff0c;简称PCA&#xff09;是一种统计方法&#xff0c;它通过正交变换将一组可能相关的变量转换成一组线性不相关的变量&#xff0c;这些不相关变量称为主成分。PCA常用于降维、数据压缩和模式识别等领域。 PCA的主要…

tcp协议中的起始序号

目录 起始序号 引入 序号和确认序号 总结 起始序号 引入 在介绍TIME_WAIT状态时,我们就提到了起始序号 -- tcp协议的超时重传(去重,确定时间),通信建立机制(三次握手,通信,四次挥手的细节和图解),为什么是3次/4次,肉机,全/半连接队列,SYN洪水,TIME_WAIT状态(解决,为什么出现…

重写setter方法要小心递归调用

错误的重写 // 假设SQIPerson有一个子类叫做SQISmithPerson, 专门表示那些姓"Smith"的人, 重写了 lastName 属性对应的设置方法 - (void)setLastName:(NSString *)lastName {if (![lastName isEqualToString:"Smish"]) {[NSException raise:NSInvalidArgu…

【系统学C++】一、从C语言到C++(一)

【系统学C】一、从C语言到C&#xff08;一&#xff09; C介绍C语言和C的联系C介绍 头文件命名空间定义命名空间使用命名空间中的名称使用using声明或指令命名空间与C语言的对比给命名空间起别名注意事项std 标准输入输出std::endl使用std::cout进行输出使用std::cin进行输入格式…

EGST:Explicit Geometric Structure Transformer论文解读

目录 一、导言 二、相关工作 1、3D局部描述子 2、点云配准方法 三、EGST模型 1、结构化特征 2、特征提取 3、点云匹配 4、变换估计 5、损失函数 四、实验 1、数据集 2、评估指标 3、细节 4、对比实验 一、导言 该论文提出一种基于增强几何结构特征的点云配准方…

flutter image_picker 执行拍照的图片怎么保存到本地

在 Flutter 中&#xff0c;使用 image_picker 插件拍照的图片默认会被保存到设备的临时目录中。这个临时目录的具体位置取决于设备的操作系统。在 iOS 上&#xff0c;它通常是应用的沙盒目录&#xff1b;在 Android 上&#xff0c;它通常是应用的缓存目录。 这些图片不会被自动…

C语言详解文件操作

目录 什么是文件&#xff1f; 为什么使用文件&#xff1f; 程序文件和数据文件、文本文件和二进制文件 1.程序文件和数据文件 1.1程序文件 1.2数据文件 2.文本文件和二进制文件 文件的打开和关闭&#xff08;流、标准流、文件指针和文件的打开与关闭&#xff09; 1.流和标…

Web前端管理系统项目:深度解析与实现之道

Web前端管理系统项目&#xff1a;深度解析与实现之道 在当今数字化时代&#xff0c;Web前端管理系统项目已成为企业信息化建设的核心组成部分。这类项目不仅涉及技术的深度和广度&#xff0c;更考验开发者的综合素质和创新能力。本文将从四个方面、五个方面、六个方面和七个方…

希尔排序(Shell_sort)

希尔排序常用于插入排序的数据预处理&#xff0c;用于提升插入排序的大数据处理速度 将插入排序的函数改为n递增即可使用希尔排序 间隔为n的插入排序&#xff1a; 将i初始值改为1&#xff0c;然后j循环所有的1改为n即可 void Insertion_sort(int *arr,int size,int n) {int…

有点好玩的python运维脚本

python运维脚本 1. 常用端口扫描2. 文件整理 1. 常用端口扫描 在计算机网络中&#xff0c;端口是一个通信端点&#xff0c;允许不同的进程或服务通过网络连接和交换数据。端口通过数值来标识&#xff0c;并与特定的协议相关联。未采取适当安全措施而保持端口开放&#xff0c;可…

InternLM Xtuner Qlora 微调

Xtuner 简介 XTuner 是由上海人工智能实验室开发的一款低成本大模型训练工具箱。它以高效、灵活和全能的特性&#xff0c;成为轻量化大模型微调的理想选择。借助 XTuner&#xff0c;用户仅需 8GB 显存即可对 InternLM2-7B 模型进行微调&#xff0c;从而定制出独一无二的 AI 助手…

C++~~期末复习题目讲解---lijiajia版本

目录 1.类和对象 &#xff08;3&#xff09;创建对象的个数 &#xff08;3&#xff09;全局变量&#xff0c;局部变量 &#xff08;4&#xff09;构造函数的执行次数 &#xff08;5&#xff09;静态动态析构和构造顺序 &#xff08;6&#xff09;初始化顺序和声明顺序 &a…

安装systemd-bootchart

要安装systemd-bootchart&#xff0c;你可以按照以下步骤进行&#xff1a; 步骤一&#xff1a;更新软件包列表 首先&#xff0c;打开终端并更新你的软件包列表&#xff0c;以确保你拥有最新的可用软件包信息。运行以下命令&#xff1a; sudo apt update步骤二&#xff1a;安…

Git使用总结(git使用,git实操,git命令和常用指令)

简介&#xff1a;Git是一款代码版本管理工具&#xff0c;可以记录每次提交的代码&#xff0c;防止代码丢失&#xff0c;可实现版本迭代&#xff0c;解决代码冲突&#xff0c;常用的远程Git仓库&#xff1a;Gitee&#xff08;国内&#xff09;、GitHub&#xff08;国外&#xff…

接口请求的六种常见方式详解(get、post、head等)

一&#xff0e;接口请求的六种常见方式&#xff1a; 1、Get 向特定资源发出请求&#xff08;请求指定页面信息&#xff0c;并返回实体主体&#xff09; 2、Post 向指定资源提交数据进行处理请求&#xff08;提交表单、上传文件&#xff09;&#xff0c;又可能导致新的资源的建…

封装console

目的 1. 封装console.log , 使得打印更美观方便 2. 同时希望上线后不在打印消耗资源 例图&#xff1a; export const prettyLog () > {const isProduction import.meta.REACT_APP_ENV "prod";const isEmpty (value) > {return value null || val…