冒泡排序算法(JAVA)

3 篇文章 0 订阅

冒泡排序算法(JAVA)

一、   概要

前天,有人问下排序算法的实现,所以抽时间写了个冒泡排序算法。冒泡排序算法的原理是从第一个数开始,依次用当前的数与后面的每个数进行比较,如果当前数大于后面的任何一个数字,都交换当前两个数的位置。在数据比较小的时候使用冒泡排序算法效率还可以(10000长度的整形数组排序大概351ms),但是数组比较长的时候冒泡排序的效率比较低,可以采用快排或者归并。

二、   代码

冒泡算法的关键代码如下:

package com.csdn.algorithm;

import java.util.Random;

/**
 * 测试冒泡排序
 * 
 * @author Administrator
 * 
 */
public class TestBubbleSort {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 1.构造数据
		Random aRandom = new Random();
		int nArrayLenght = 60000;
		int[] aData = new int[nArrayLenght];
		for (int i = 0; i < aData.length; i++) {
			aData[i] = aRandom.nextInt(10000);
		}

		// 2.进行排序
		long lStartTime = System.currentTimeMillis();
		int[] aSortResult = bubbleSort(aData);
		long lEndTime = System.currentTimeMillis();

		// 3.打印排序用时
		System.out.println("排序[" + nArrayLenght + "]个数,用时  "
				+ (lEndTime - lStartTime) + "ms");

		// 3.打印结果
		//for (int i = 0; i < aSortResult.length; i++) {
		//	System.out.println(aSortResult[i]);
		//}

	}

	/**
	 * 把传入的整形数组进行冒泡排序,数组中按照升序排列<BR/>
	 * 算法复杂度:O(n^2)<BR/>
	 * 小于10000个数据的数组用它不会超时(大概一秒) <BR/>
	 * 但如果更大就要用快排或归并O(n*log2(n))
	 * 
	 * @param _aIntegerArray
	 * @return
	 */
	private static int[] bubbleSort(int[] _aIntegerArray) {
		// 1.参数校验
		if (_aIntegerArray == null) {
			return _aIntegerArray;
		}

		// 2.从第一个数开始,依次用前面的数字与后面的数字一一比较,取小的值
		for (int i = 0; i < _aIntegerArray.length; i++) {
			for (int j = i + 1; j < _aIntegerArray.length; j++) {
				if (_aIntegerArray[i] > _aIntegerArray[j]) {
					// 交换两数
					int nTemp = _aIntegerArray[i];
					_aIntegerArray[i] = _aIntegerArray[j];
					_aIntegerArray[j] = nTemp;
				}
			}
		}

		// 3.返回值
		return _aIntegerArray;
	}

}


 

三、   执行时间统计

 
 

排序[10]个数,用时  0ms

排序[100]个数,用时  1ms

排序[1000]个数,用时  3ms

排序[10000]个数,用时  351ms

排序[20000]个数,用时  1326ms

排序[30000]个数,用时  2714ms

排序[60000]个数,用时  9054ms

其他长度的数组排序时间可以用程序测试下

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

O溺水的鱼0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值