冒泡排序演算法(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 其他長度的數組排序時間可以用程式測試下 |