改进的双向快速冒泡排序算法-Java版

本文介绍了一种改进的冒泡排序算法,通过采用左小右大的原则和确保右侧元素始终大于左侧元素的方法来提高排序效率。该算法在每次迭代过程中只遍历未排序部分的一半,从而减少了不必要的比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

排序的思路:主要采用左小右大的原则向两边移动,而在移动前会保证右边数一定大于左边数,这样每次大小比较只需要各负责一半遍历比较,不需要遍历所有的数据,具体实现如下:

public static void fastBubble(int[] data){
		long startTime,endTime;
		int end = data.length-1;
		int tmpl;
		int start = 0;
		int minCur,maxCur;
		startTime = System.nanoTime();
		while(start < end-1){
			minCur = start;
			maxCur = end;
			for(int mi=start,mx=end;mx-mi>=0;mi++,mx--){
				if(data[mi] > data[mx]){
					tmpl = data[mi];
					data[mi] = data[mx];
					data[mx] = tmpl;
				}
				if(data[mi]<data[minCur]) minCur = mi;
				if(data[mx]>data[maxCur]) maxCur = mx;
			}		
			if(minCur != start){
				tmpl = data[minCur];
				data[minCur] = data[start];
				data[start] = tmpl;
			}
			if(maxCur != end){
				tmpl = data[maxCur];
				data[maxCur] = data[end];
				data[end] = tmpl;
			}
			start++;
			end--;
		}
		endTime = System.nanoTime();


		System.out.print("排序后是:");
		for(int va:data){
			System.out.print(va+" ");
		}
		System.out.println();
		System.out.println("排序使用时间:"+(endTime-startTime));
	}

经过测试,在传统的冒泡算法中,该冒泡算法效率最高!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值