Java使用分治递归的思想实现快速排序

快速排序 java代码 java 快速排序实现。可以跑的代码 java 快速排序实现。可以跑的代码 java 快速排序实现。可以跑的代码 java 快速排序实现。可以跑的代码 立即下载

最近想探究一下算法方面的问题,闲着无聊就撸了一波快排的代码,以前都是直接拿过来用的,但是想想毕竟那是别人的东西,只有自己学会才算自己的,思路其实不难,只是需要好的处理一些细节问题,下面来说说思路和代码实现。

基本思路:

 * 1、定义一个函数找出基准值temp。

 *    (1)找基准的函数中:定义一个头指针,尾指针,头指针指向数组的第一个元素,尾指针指向数组的最后一个元素。
 *    (2)在头指针指向的位置小于尾指针的情况下: 尾指针对数组从右至左找小于temp值的位置,然后将该位置上的元素值与头指针指定的位置上的元素值进行交换。
 *    (3)在头指针指向的位置小于尾指针的情况下: 头指针对数组从左至右找大于temp值的位置,然后将改位置上的元素值与尾指针指定的位置上的元素值进行交换。
 *    (4)循环执行(1)(2)直到头指针指向的位置等于尾指针指向的位置时,返回头指针指向的位置(也就是基准的位置值)。
 * 2、利用分治思想,将原问题划分成多个子问题,也就是通过基准将数组一分为二,再对数组arr[0 ~ temp-1]和数组arr[temp+1 ~ arr.lengh-1]进行排序。
 * 3、利用递归的思想,排序时也按照步骤1执行,然后继续划分,继续排序,一直递归,直到只有一个元素为止。
 *          PS:(程序中递归传入的参数是要排列数值的第一个值left和最后一个值right,所以当数组中只有一个元素的时候,即left=right)
 *
 * 实例说明:数组的初始序列为 :4 3 5 7 2 9 4 1 3 8 11
 *               执行从右至左查找后:3 3 5 7 2 9 4 1 4 8 11
 *               执行从左至右查找后:3 3 4 7 2 9 4 1 5 8 11

 *                       执行一趟排序后:3 3 1 2 4 9 4 7 5 8 11

package com.meession.quicksort;


public class QuickSort {
	private int[] arr = { 4, 3, 5, 7, 2, 9, 4, 1, 3, 8, 11 };

	public static void main(String[] args) {
		QuickSort qs = new QuickSort();
		qs.init(); //初始化
		qs.showArr(); //打印已经排列好的数组
	}

	private void init() { //初始化
		int left = 0;
		int right = arr.length;
		QSort(left, right); //调用递归函数进行排序
	}

	private void QSort(int left, int right) { //递归进行排序
		if (left < right) {
			int temp = findSign(left, right); //找出基准位置
			QSort(left, temp); // 递归
			QSort(temp + 1, right);
		} else
			return;

	}

	private void showArr() { //输出数组中的元素
		int i = 0;
		while (i < arr.length)
			System.out.print(arr[i++] + " ");
		System.out.println();
	}

	private int findSign(int left, int right) {  //找出基准位置函数
		int temp = arr[left];
		while (left < right) {

			while (left < right) {
				if (temp > arr[--right]) { // --i表示先执行一次减,所以此处初始值为arr[right-1]
					swap(left, right);
					break;
				}

			}
			
			while (left < right) {
				if (temp < arr[++left]) {
					swap(left, right);
					break;
				}
			}
			
		} // while循环结束的条件就是left=right
		
		return left;

	}

	private void swap(int left, int right) { //交换两个数
		int temp = arr[left];
		arr[left] = arr[right];
		arr[right] = temp;
	}
}


分治法快速排序算法QuickSort 分治法的应用,快速排序是其中一种。注释便于读者明白。 立即下载

相关推荐

Java基于分治法实现的快速排序算法示例

主要介绍了Java基于分治法实现的快速排序算法,结合实例形式分析了java基于分治法的快速排序相关实现技巧,代码中备有较为详细的注释说明便于理解,需要的朋友可以参考下

java将一乱序数组排序,排序算法——分治思想与归并排序

1、分治法思想分治思想主要通过递归来实现,每层递归中主要包括三个步骤:分解:即将原问题划分为若干子问题,子问题的形式要保证和原问题一致,但规模更小。解决:当划分子问题的规模足够小时,停止递归,求解子问题,获取子问题的解决结果并返回给上一层。合并:将子问题的解决结果进行合并,得到原问题的解。也就是说,分治思想就是将一个大问题用过递归层层分解为无数个子问题,这些子问题要保证与与原问题是一个类型,只不过...

weixin_35052140的博客 572

快速入门:使用 SQL Server Management Studio (SSMS) 连接和查询 SQL Server 实例

开始使用 SQL Server Management Studio (SSMS) 连接到 SQL Server 实例并运行一些 Transact-SQL (T-SQL) 命令。本文介绍如何连接和查询实例SQL Server。有关 Azure SQL,请参阅连接。若要使用,请参阅连接和查询。若要详细了解如何SQL Server Management Studio,请参阅其他。......

m0_72938729的博客 5729

java利用分治思想实现快速排序

java实现快速排序 分治策略的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。 快速排序算法的基本思想 设当前待排序的无序区为R[low…high],利用分治算法可将快速排序的基本思想描述为: 1.分解:  在R[low…high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low…pivotpos-1)和R[pivotpo

田埂、の技术博客 727

Autodesk全家桶:从AutoCAD到Maya,设计师必备的7款神器全解析

本文全面解析Autodesk全家桶中的7款设计师必备软件,包括AutoCAD、Revit、Inventor、Fusion 360、Maya和3ds Max等。从二维制图到三维建模,从建筑信息模型(BIM)到影视动画制作,这些工具在工程设计、建筑可视化和数字创意领域展现出强大的协同效应。通过实战案例展示如何整合工作流,显著提升设计效率与项目质量。

weixin_29237635的博客 461

R语言实战:GEO单细胞数据下载与自动化整理全流程(附代码)

本文详细介绍了使用R语言从GEO数据库下载scRNA-seq数据并实现自动化整理的完整流程。通过GEOquery和Seurat等工具包,读者可以高效获取单细胞RNA测序数据,完成从原始数据下载到预处理的全过程,最终生成可直接用于分析的Seurat对象。文章包含完整代码示例,特别适合生物信息学研究者处理单细胞数据。

weixin_29061821的博客 427

java递归

计算机科学中,递归是一种解决计算问题的方法(但他只是方法之一),其中解决方案取决于同一类问题的更小子集(方法自己调用方法自己,而方法里面调用别的方法,就不是解决同一类问题了)

风止的博客 3811

人工智能面试总结-Python

B站:啥都会一点的研究生 公众号试读:啥都会一点的研究生 目录说说Python程序运行过程?说说Python的作用域?说说Python的数据结构?说说Python中可变与不可变类型?说说进程与线程?说说Python中的多线程?说说Python中的多进程?说说Python互斥锁与死锁?说说Lambda?说说Python的深拷贝与浅拷贝?说说Python多线程是否能用多个CPU,为什么?说说Python垃圾回收机制?说说Python里的生成器?说说迭代器与生成器的区别?说说Python 列表的 del,rem.

啥都生的博客 1万+

分治算法——快速排序(JAVA实现)

快速排序:又称划分交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序n个项目要O(n log2 n)(大O符号)次比较。在最坏状况下则需要 O(n^2)次比较,但这种状况并不常见。事实上,快速排序 (n log n)通常明显比其他算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地达成。简单来说:就是给基准值找正确位置的过程。

weixin_52954183的博客 876

使用Open3D进行RGB-D图像点云处理

在本文中,我们将使用Open3D来处理RGB-D图像,提取点云并进行一些基本的操作。总结起来,本文介绍了如何使用Open3D库处理RGB-D图像并提取点云。我们展示了如何读取RGB-D图像,创建RGB-D图像和点云,并显示点云。除了显示点云,Open3D还提供了许多其他功能,如点云滤波、点云配准、表面重建等。在创建RGB-D图像时,我们需要指定深度图像的缩放因子和截断值,以及是否将RGB图像转换为强度图像。希望本文能够帮助您入门Open3D,并在处理RGB-D图像和点云数据时提供一些指导。

QfcaLinux的博客 445

前言:关于作者吴秋生博士与此书简介

博士现为田纳西大学,诺克斯维尔分校,地理系的副教授。他的研究兴趣包括地理信息科学(GIS)、遥感和环境建模。更具体地说,对应用地理空间大数据、机器学习和云计算(例如,谷歌地球引擎、微软行星计算机)来研究环境变化,特别是地表水和湿地淹没动态。吴博士是开放科学和可重复研究的倡导者。他开发了几个用于高级地理空间分析的开源软件包(例如,吴博士还在YouTube上发布了数百个有关GIS和地图绘制的视频。更多有关他的开源项目信息,请访问GitHub(查看他的YouTube频道。.....................

韩天放 6089

java代码实现分治算法深入简出

分治算法是一种递归算法,它将问题划分为几个独立的子问题,然后递归地解决这些子问题,最后将子问题的解合并起来得到原问题的解。分治算法常用于解决计算几何、统计学以及数值分析等领域的问题。归并排序的基本思想是将一个数组划分为两个子数组,然后递归地对这两个子数组进行排序,并且将这两个有序的子数组合并成一个有序的数组。输出结果为:[1, 2, 3, 4, 5, 6, 7, 8, 9]以归并排序为例说明分治算法的思想和实现过程。将两个有序的子数组合并为一个有序的数组。将数组划分为两个子数组。

董嵩杰的博客 266

即插即用系列(代码实践) | CVPR 2025 FDConv:频域动态卷积,打破密集预测任务的参数效率瓶颈

本文提取自 CVPR 2025 的最新底层算子革新论文《Frequency Dynamic Convolution for Dense Image Prediction》。近年来,动态卷积(Dynamic Convolution)通过融合多个并行卷积核极大地提升了模型性能,但研究表明:这些并行卷积核在频域上的响应高度相似,导致了极其严重的参数浪费,且缺乏对不同频率特征的自适应能力。本文复现了该网络的核心架构——FDConv(频率动态卷积)。该方案创造性地在傅里叶域(Fourier Domain)中学习固定参

分享顶会顶刊论文即插即用模块 113

java快排思想_快速排序(一) 思想 JAVA实现

已知数组59、71、37、56、88、96、21、58、48、43 采用快速排序将数组有序。快速排序同样采用了“分治策略”,使用递归的思路来实现算法。快速排序的算法思想:9、71、37、56、88、96、21、58、48、43 数组元素0、1、 2、 3、 4、 5、 6、 7、 8、 9 数组下标选取数组中某一个元素,使得元素左侧的数组元素都小于等于该元素,数组右侧的...

weixin_42310348的博客 313

基于YOLOv11的仓库机器人导航系统设计与实现:Amazon Robotics Challenge解决方案

本文将详细介绍一个基于YOLOv11目标检测算法的仓库机器人导航系统,该系统能够准确识别托盘(pallet)和箱子(box),为机器人提供精确的导航信息。而基于深度学习的视觉导航系统能够实时识别环境中的关键物体,如托盘和箱子,从而实现更智能的路径规划和货物搬运。YOLOv11作为YOLO系列的最新演进版本,在检测精度和速度上都有显著提升,非常适合仓储环境中的实时物体检测任务。YOLOv11在保持实时性的同时,提高了对小物体和密集物体的检测能力,这对仓储环境中的托盘和箱子检测尤为重要。

YOLO 303

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

快速排序 -- Java实现

快速排序 – Java实现 1、快速排序的算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 该方法的基本思想是: 1. 先从数列中取出一个数作为基准数; 2. 分区过程,将比基准数大的数全部放到它的右边,小于或等于它的数全部放到它的左边 3. 对左右区间重复第二步,直至每个区间都只有一个数,则排序完成。 算法的空间复杂度:O(logn)(栈占用的空间) 2、快速排序的实现过

m0_48896264的博客 164

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

快速排序——分治

快速排序是常见排序算法中的一种,主要用于将一串长度为 n 序列按一定规则排序。二分、分治...

NaHCOOO_MiNi的博客 191

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java快速排序

可以先参考归并排序 快速排序算法首先会在序列中随机选择一个基准值(pivot),然后将除了基准值以外的数分 为“比基准值小的数”和“比基准值大的数”这两个类别,再将其排列成以下形式。 [ 比基准值小的数 ] 基准值 [ 比基准值大的数 ] 接着,对两个“[ ]”中的数据进行排序之后,整体的排序便完成了。对“[ ]”里面的数据 进行排序时同样也会使用快速排序。 快速排序是一种“分治法”。它将原本的问题分成两个子问题(比基准值小的数和 比基准值大的数),然后再分别解决这两个问题。子问题,也就

__Miracle__ 339

快速排序

快速排序算法

momo898821的博客 130

【排序算法】深入理解快速排序算法:从原理到实现

快速排序是一种经典的排序算法,它的核心思想是分治和递归。通过将待排序序列分割成较小的子序列,分别对子序列进行排序,最终将子序列合并成有序序列。本文将从原理、时间复杂度、应用场景、优缺点等方面深入探讨快速排序算法,并通过 Java、JavaScript 和 Python 三种编程语言的示例进行说明。

lmj3732018的博客 5918

快速排序Java\C++版实现,和其他复制粘贴的不一样,既简单又有一点点小技巧

快速排序java版实现,简单向原理实现java 完整代码C/C++版本 原理 快速排序体现的是一种分治的思想,它的核心思想是化整为零。每次在待排序列A[p…r]中去一个标杆,然后我们将这个序列划分为两部分,使得A[p…q…r]满足q左边的元素都小于或等于q,q右边的元素都大于q。然后我们在对A[p…q]和A[q…r]实行相同的操作,重复下去最终会得到排好序的序列。 实现 语言描述的或许不是很清晰,而且大部分人应该都知道快速排序的原理,可能与本文所说的有出入,但是大致都差不多。 所以我们要实现快速排序首先需要

zx1772874955的博客 583

java 快速排序优化版

<br />public class QuickSortStudy2 {<br /> /**<br />  * 2011-3-25练习<br />  * 快速排序<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />  int[] nums = Sort.getRandom(100, 100);<br />  quickSort(nums,0,99);<br />  for(int i = 0;

elfenliedef的编程之旅 564

快速排序与冒泡排序算法的设计与实现

大家可以先建个项目,运行一下下面的代码,看一下效果。 快速排序算法 package com.handofgod; public class QuickSource { public static void quick_sort(int [] arr, int s, int length) { if (s < length) ...

qq_38669394的博客 553

排序算法之快速排序

快速排序在排序算法中具有排序速度快,而且是就地排序等优点,使得在许多编程语言的内部元素排序实现中采用的就是快速排序,很多面试题中也经常遇到。对于其算法的改进,除了刚刚上文中提到的意外,根据实际场景还有诸多改进方法,包括对小序列采用插入排序替代,三平均划分,三分区划分等改进方法(相关的改进方法就不一一说明,有兴趣的读者可上网查阅了解)。

1151

快速排序的Java实现_world

package com.atguigu.me.algorithm.sort; public class QuickSort { public static void sort(Comparable[] c){ sort(c,0,c.length-1); } private static void sort(Comparable[] c, int lo, int hi) {

Yoooooung的专栏 770
上一篇: Java实现八数码问题
effort_02
博客等级 码龄12年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值