冒泡排序算法(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 其他长度的数组排序时间可以用程序测试下 |