当前位置: 首页 > news >正文

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

目录

一、问题描述

二、解题思路

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++实现,属于伪代码,应试的话可以参考一下:

四、刷题链接

排序_牛客题霸_牛客网

相关文章:

  • 6-11 函数题:某范围中的最小值
  • 源代码防泄密经验分享之安全上网篇
  • 联邦学习的基本流程,联邦学习权重聚合,联邦学习权重更新
  • Serverless 使用OOS将http文件转存到对象存储
  • Spring的循环依赖
  • Vite - 项目打包从 0 到 1(完美解决打包后访问白屏问题)
  • Python第二语言(八、Python包)
  • 解决富文本中抖音视频无法播放的问题——403
  • HTML静态网页成品作业(HTML+CSS)—— 非遗皮影戏介绍网页(6个页面)
  • 后端启动项目端口冲突问题解决
  • 【随手记】maplotlib.use函数设置图像的呈现方式
  • Android FirebaseApp.initializeApp(this)无法初始化
  • 璨与序列 题解(stl,dfs)
  • 【Python入门与进阶】Python如何处理不同进制的数据
  • Spring Cloud Bus 消息总线基础入门与实践总结
  • 分享一款快速APP功能测试工具
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • css系列之关于字体的事
  • LintCode 31. partitionArray 数组划分
  • mysql innodb 索引使用指南
  • windows下mongoDB的环境配置
  • 多线程事务回滚
  • 翻译--Thinking in React
  • 给第三方使用接口的 URL 签名实现
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 排序算法之--选择排序
  • 区块链分支循环
  • 说说动画卡顿的解决方案
  • 原生js练习题---第五课
  • ​Linux·i2c驱动架构​
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #{} 和 ${}区别
  • #pragam once 和 #ifndef 预编译头
  • $(selector).each()和$.each()的区别
  • $L^p$ 调和函数恒为零
  • (+4)2.2UML建模图
  • (bean配置类的注解开发)学习Spring的第十三天
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (六)DockerCompose安装与配置
  • (六)软件测试分工
  • (算法)求1到1亿间的质数或素数
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转载)(官方)UE4--图像编程----着色器开发
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET 使用 XPath 来读写 XML 文件
  • .net连接MySQL的方法
  • .ui文件相关
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [Android]How to use FFmpeg to decode Android f...
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [c]统计数字
  • [C++][数据结构][跳表]详细讲解