无聊想到种排序方式,不知道属于什么排序

查了下原来也属于快排的一种实现,了解了

 

package com.fourfireliu.test;

public class MySort {
	//计算循环次数
	private static int count1 = 0;
	//计算互换次数
	private static int count2 = 0;
	
	
	public static void main(String args[]) {
		int[] testArray = {3,3,0,3,3};
		MySort qs = new MySort();
		qs.sort(testArray);
	}
	
	public void sort(int[] array) {
		if (array!=null&&array.length>1) {
			sort(array, 0, array.length-1);	
		}
		
		//打印结果
		System.out.println();
		for (int i:array) {
			System.out.print(i+" ");
		}
		
		System.out.println();
		System.out.println("Count1 is " + count1 + " and count2 is " + count2);
	}
	
	//排序基本方法入口
	private void sort(int[] array, int fromIndex, int endIndex) {
		if (isOutOfBound(array, fromIndex)||isOutOfBound(array, endIndex)||fromIndex>=endIndex) {
			return;
		}

		
		int mid = getMid(fromIndex, endIndex);

		int from = getFirstLarger(array, fromIndex, mid);
		int to = getFirstSmaller(array, endIndex, mid);

		//从开头结尾各找一个位置不对的,两者进行互换,直到其中一个先到达中点
		while (from!=-1&&to!=-1) {
			swap(array, from, to);
			from = getFirstLarger(array, from, mid);
			to = getFirstSmaller(array, to, mid);
		}

		//轮询剩下的,将目标数安置在合适位置
		int target = mid;

		if (from!=-1) {
			for (int count=from;count<mid;count++) {
				count1++;
				target = getSwapTarget(array, count, target);
			}
		}

		if (to!=-1) {
			for (int count=to;count>mid;count--) {
				count1++;
				target = getSwapTarget(array, count, target);
			}
		}

		//继续对子列进行如此操作
		sort(array, fromIndex, target-1);
		sort(array, target+1, endIndex);
	}
	
	//在目标数左边搜索第一个比目标数更大的
	private int getFirstLarger(int[] array, int fromIndex, int mid) {
		for (int i=fromIndex;i<mid;i++) {
			count1++;
			if (array[i]>array[mid]) {
				return i;
			} 
		}
		
		return -1;
	}
	
	//在目标数右边搜索第一个比它更小的
	private int getFirstSmaller(int[] array, int fromIndex, int mid) {
		for (int i=fromIndex;i>mid;i--) {
			count1++;
			if (array[i]<array[mid]) {
				return i;
			} 
		}
		
		return -1;
	}
	
	/**
	 * 如果顺序不对,则互换位置
	 * 
	 * @param array
	 * @param count
	 * @param target
	 * @return
	 */
	private int getSwapTarget(int[] array, int count, int target) {
		if (array[count]<array[target]&&count>target) {
			swap(array, count, target);
			target = count;
		}
		
		if (array[count]>array[target]&&count<target) {
			swap(array, count, target);
			target = count;
		}
		
		return target;
	}
	
	private void swap(int[] array, int a, int b) {
		int temp = array[a];
		array[a] = array[b];
		array[b] = temp;
		count2++;
	}
	
	private boolean isOutOfBound(int[] array, int index) {
		return index<0||index>=array.length;
	}
	
	private int getMid(int start, int end) {
		return (start+end)/2;
	}
}

 

用STM32的SPI模式2搞定SSI绝对值编码器通信(附完整代码与避坑点) 本文详细解析了如何使用STM32的SPI模式2实现SSI绝对值编码器通信,包括硬件设计、SPI配置、数据处理算法及稳定性优化技巧。通过完整的代码示例和避坑指南,帮助工程师解决时序匹配、数据解析等常见问题,提升工业自动化系统中的编码器通信可靠性。 阅读详情

相关推荐

ADS RFpro 射频阻抗仿真步骤

导入器件后,在库里面选取器件的对应模型,如图所示我们选取10pf 系统自带的村田模型。选取网络上的器件,拖入到下面component Models。导入成功后,截取需要仿真的区域(不截取仿真时间会非常长),可以生成对应如下原理图,通过原理图继续调整仿真。图上找到需要仿真链路上的网络,右键设置为信号。的叠层信息,按照PCB板厂提供信息填写完整。选择仿真的频率范围和频点数,生成如下图的RFPro仿真界。,然后再把GND也添加到下面。按图设置截取需要仿真的部分。添加成功后 网络就有了,15 双击run开始仿真。

m0_72954480的博客 3215

无聊写排序之 ----基数排序(RadixSort)

基数排序(RadixSort)      基数排序也是一种不需要元素间的比较进行排序的排序算法,而是通过对数据的分配和合并来实现的排序,也叫做桶子法排序,通过对元素按照键值进行分配到指定标准的桶中,在进行合并收集从而达到排序的结果,是一种稳定排序,基数排序的时间复杂度是O(k·n)其中n是排序元素个数,k是数字位数。注意这不是说这个时间复杂度一定优于O(n·log(n)),k的大小取决于数字位的

尜尜君的小世界 687

手把手教你配置UEFI Secure Boot:从密钥生成到系统验证(附避坑指南)

本文详细介绍了如何配置UEFI Secure Boot,从密钥生成到系统验证的全过程,包括PK、KEK等关键密钥的生成方法,以及常见问题的解决方案。通过实战案例和避坑指南,帮助用户有效提升系统启动安全性,防止恶意软件植入。

weixin_30776273的博客 340

无聊写排序之 ---- 计数排序(CountingSort)

前面讲过了几种常见的排序方法,比如冒泡,归并,插入,快排等等,这些排序算法的时间复杂度都限制在O(nlogn)的上界。他们所有的排序结果都依赖于各个元素之间的比较来确定,所以我们把这类算法称之为比较排序。今天我们介绍时间复杂度为O(n)上界的排序算法:计数排序。      计数排序假设N个输入元素的每一个都是确定在一个range里面,比如一个整数序列,其中所有的元素都不大于K,当k=O(n)时,

尜尜君的小世界 623

手把手教你用ESP32-S3打造智能聊天机器人-立创实战派

本文将详细介绍如何利用立创ESP32-S3开发板,烧录小智AI程序,快速实现一个功能强大的聊天机器人。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 9910

使用 Visual Studio Code 连接 ABAP On-Premise 系统做开发的详细配置步骤

本文详细介绍了如何在Visual Studio Code中通过ABAP Development Tools扩展连接ABAP On-Premise系统。关键步骤包括:通过Ctrl+Shift+P打开命令行面板选择「ABAP: New Destination...」创建RFC连接(仅支持SSO单点登录),选择本地SAPGUI中已有的系统,输入Client ID、语言和用户名(无需密码),最后将目标系统添加到工作区即可开始开发。文章强调了企业安全考虑下仅支持SSO的设计理念,并展示了连接配置的JSON格式示例。整

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 983

无聊python小程序zhi 排序+动图

仅供娱乐 参考内容1: 百度百科 参考内容2: 菜鸟教程 冒泡排序 def bubble_sort(A): fig = plt.figure() ax = fig.add_subplot(1,1,1) A = np.array(A) plt.ion() x = np.arange(0,len(A)) while True : number = 0 for i in range(len(A)-1):

python小白的博客 249

解密Whisper模型与Speaker Diarization的结合

本文介绍了如何将Whisper语音识别模型与Speaker Diarization(说话人分割)技术相结合,实现多人对话场景下的语音转录和说话人识别。文章详细讲解了技术背景、环境配置和代码实现方法,通过Pyannote进行说话人分割,结合Whisper进行语音转文本,最终输出包含说话人信息的完整转录结果。该解决方案适用于会议记录、访谈分析等场景,显著提升了语音处理的应用价值。

2501_90323865的博客 152

无聊写排序之 ---- 归并排序(MergeSort) 非递归实现

前面讲了归并排序的递归实现,虽然递归实现代码简洁容易理解,但是在实际执行中由于

尜尜君的小世界 2807

Python 爬虫实战:付费 IP 代理使用技巧与爬虫稳定性优化

付费IP代理实战指南:突破反爬与优化稳定性 本文系统讲解付费IP代理在爬虫项目中的高效应用方法。首先对比分析静态代理、动态代理和隧道代理的优缺点及适用场景,推荐高并发项目优先选择隧道代理。然后详细演示了主流代理服务商的集成方法,包括代理池的自动更新和健康检测机制。核心部分重点介绍了爬虫稳定性优化策略,如智能重试、频率控制和请求间隔优化等关键技术。最后通过压力测试验证优化效果,并提供成本控制方案,包括代理复用、错峰爬取等实用技巧。通过本教程,开发者可有效解决高并发爬虫中的IP封禁问题,显著提升系统稳定性和抗风

2503_91057718的博客 2449

2025年微信小程序获取手机号授权登录注册详细教程(含服务端)。不弹窗原因以及减少组件用量的方法

前端把获取到的code传给后端,后端获取access_token和前端传过来的code,请求服务器接口,即可获取到手机号。

coderYYY的博客 3万+

常见的排序算法 (冒泡、选择、插入、希尔、归并、快速排序、堆排序、桶排序) 以及优化

文章目录1、冒泡排序1.冒泡排序的第一个优化 — 有序序列不再遍历2.冒泡排序的第二个优化 — 修改遍历长度3.冒泡排序的第三个优化 — 鸡尾酒排序2、选择排序3、插入排序4、希尔排序5、归并排序6、快速排序1.快速排序的第一种优化 — 随机化快排 / 三数取中 / 取中间值等2.快速排序的第二种优化 — 三路排序3.快速排序的第三种优化 — 使用插入排序4.综合三种优化以后的快速排序7、堆排序8...

jnxxhzz的博客 9万+

YOLOV5 自动刷图脚本实战(十五)之如何找到正确的门

DXF是一个2D游戏,我们所看到的人物移动,其实是后面的背景在移动,我们所看到的画面,不过是一个完整背景中的一个镜头视角而已想要正确找到门的坐标,我们需要对不同的地图中的每个房间做一些配置信息。

qq_38892949的博客 2805

闲来无聊手撸(冒泡排序,选择排序,插入排序,快速排序,归并排序)JAVA语言

背景 最近临近过年,公司各种工作已经是不太忙碌,就闲来无事,手就有点痒痒。于是就没事儿撸撸各种排序算法,也算排解一下寂寞。 一,冒泡排序 冒泡排序可以说是最简单的排序方式了,其过程就如同它的名字一样,挨个比较,慢慢移动,把大的或者小的给移动到一端。其动态图如下: 冒泡排序的java代码实现也很简单,如下: /** * 冒泡排序 */ public static void maoPao(int[] args){ int temp; for(int i =0;i<args.length

卿着飞翔 1098

VC中sqlite的使用

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

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

无聊时总结总结算法之08桶排序

桶排序桶排序 (Bucket sort)或所谓的箱排序的原理是将数组分到有限数量的桶子里,然后对每个桶子再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后将各个桶中的数据有序的合并起来。 排序过程: 假设待排序的一组数统一的分布在一个范围中,并将这一范围划分成几个子范围,也就是桶 将待排序的一组数,分档规入这些子桶,并将桶中的数据进行排序 将各个桶中的数据有序的

陈薛晨的博客 461

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

八种基本的排序(1)——冒泡排序(C语言实现)

冒泡排序 冒泡排序 原理 时间复杂度 算法稳定性 源代码 原理 冒泡排序算法的原理如下: 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个,这样是从小到大排。 (如果第一个比第二个小,交换 , 那就是从大到小排) 2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3.针对所有的元素重复以上的步骤,除了...

神之天宇的优快云博客 8万+

数学建模模型总结

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

选择排序以及冒泡排序

今天走路时,无聊便在脑海中想默写一下冒泡排序,因为很久没有写了,只记得冒泡排序是每一次遍历序列时,都会将最大的数升到 序列的尾部或者将最小的数降到序列的首部,写默写的过程中,相邻两数比较后,最大的数会升到尾部,但是想来想去都往递归的方 向去想了,后来回来一google,发现我的概念被弄混淆了,我将最原始的冒泡排序误以为是选择排序了,这种其实早就想到了,下面 我就来普及一下选择排序和冒泡排序的

zkw12358的专栏 1185

无聊写排序之 ---- 冒泡排序(Bubble Sort)

排序是算法实现

尜尜君的小世界 908

闲来无聊来说说归并排序

说到归并排序,其实归并排序还是比较重要的,归并归并,就是先分后并,也就和分治法比较相似了,直切主题吧,我们来谈谈归并排序的基本思想,就是先将数组平均分为两部分,看其中两部分是否有序,若两部分都已经有序,则只需要把他两合并成一个新的数列即可,但要是两个数组还是无序的,我们就要再分,直到里面只有一个元素的时候或里面的元素已经有序。然后我们再将它们一步一步地合并起来。 文字可能不太好理解,那我来给大家

qq_35623393的博客 283

无聊写个快排

又周末,无聊又写写快排~ void QSort(int array[],int p,int q) { int begin = p; int end = q; int mid_value =array[begin]; if (begin>=end) { return; } while (begin<end) { while((begin=mid_value)) {

行者无疆的专栏 965

用动画的方式显示排序

闲来无事,写了个排序算法;我的思路是将一组数据进行两两比较,如果前面的数大于后面的数,那么将它们交换一下位置;接下来就需要生成随机数;通过异步的方式生成,并将返回值设为div的高度。但是这样还是感觉无聊,所以我想将数据显示出来,形成排序动画效果。所以我将数据当做一个div高度的值,多少个数据就有多少个div;这样我们只需控制k的值就能获得不同数量的div。最终运行代码就可以实现动画了;

qq_59135465的博客 94

无聊写排序之 ---- 快速排序(QuickSort) 递归实现

如果排序你忘记了快速排序这个王者至尊,那你的排序

尜尜君的小世界 948

算法 七大基于比较的排序算法

本文系统介绍了七大基于比较的排序算法及其优化实现。主要内容包括:1. 排序算法分类:插入排序(直接插入、希尔)、选择排序(简单选择、堆)、交换排序(冒泡、快速)、归并排序;2. 详细算法实现:对每种排序给出核心思想、代码实现(含优化版本)和示例测试;3. 性能分析:系统比较各算法的时间/空间复杂度、稳定性,指出快速排序和归并排序的高效性;4. 特殊优化:如三数取中法优化快速排序、非递归实现等。文中通过大量代码示例和图示,直观展示了各种排序的工作原理和优化思路,为理解和应用排序算法提供了全面参考。

2301_80037974的博客 1257

快速排序,冒泡排序

快速排序是面试中最重要的排序。面试官常用这个来考别人,虽然本人鄙视(这个在工作中根本用不到,说实话,真的用这个来筛选别人,有意义吗?),一方面为了面试,一方面觉得快速排序还是挺巧妙的,不过本人更喜欢推排序,以上纯属一个无聊人的牢骚,勿介。 #include<stdio.h> #include <conio.h> void quickSort(int array[], int...

AI_BN的博客 278

冒泡排序及其效率分析(无聊搞来玩玩)

算法:即解决问题的思路(或者说解决问题的步骤) 冒泡排序介绍: 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名“冒泡排...

weixin_30508309的博客 210

插入排序,希尔排序,冒泡排序,快速排序之间的比较

1.快速排序和希尔排序不是稳定的排序方式,冒泡排序和插入排序是稳定的排序方式; 2.各种排序算法的分析和说明? 2.1-----冒泡排序   冒泡排序就是把小的元素往前调(或者把大的元素往后调)。注意是相邻的两个元素进行比较,而且是否需要交换也发生在这两个元素之间。 所以,如果两个元素相等,我想你是不会再无聊地把它们俩再交换一下。 如果两个相等的元素没有相邻,那么即使通过前面的两

民族风的专栏 1466
上一篇: 零碎笔记
下一篇: 在eclipse下创建gradle项目
iteye_15708
博客等级 码龄8年 0粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值