數據結構與算法—冒泡排序(Java實現)
阿新 • • 發佈:2018-03-24
數據結構 算法 Java 冒泡排序 [toc]
冒泡排序
程序代碼
package com.uplooking.bigdata.datastructure; import java.util.Arrays; public class BubbleSort { public static void main(String[] args) { int[] arr = {8, -2, 3, 9, 0, 1, 7, 6}; System.out.println("排序前:" + Arrays.toString(arr)); bubbleSort(arr); System.out.println("排序後:" + Arrays.toString(arr)); } /** * 排序過程分析: * i前 比較次數(arr.length為8) * 開始:8, -2, 3, 9, 0, 1, 7, 6 * * 第1趟結束:-2, 3, 8, 0, 1, 7, 6, 9 0 7 * * 第2趟結束:-2, 3, 0, 1, 7, 6, 8, 9 1 6 * * 第3趟結束:-2, 0, 1, 3, 6, 7, 8, 9 2 5 * * 第4趟結束:-2, 0, 1, 3, 6, 7, 8, 9 3 4 * * 第5趟結束:-2, 0, 1, 3, 6, 7, 8, 9 4 3 * * 第6趟結束:-2, 0, 1, 3, 6, 7, 8, 9 5 2 * * 第7趟結束:-2, 0, 1, 3, 6, 7, 8, 9 6 1 * * 結論:需要比較的趟數為 arr.length - 1 * 每一趟需要比較 arr.length - 1 - i 次 * * 由於冒泡排序為相鄰兩者相互比較對調,並不會更改其原本排序的順序,所以是穩定排序法 */ public static void bubbleSort(int[] arr) { for(int i = 0; i < arr.length - 1; i++) { for(int j = 0; j < arr.length - 1 - i; j++) { if(arr[j] > arr[j + 1]) { swap(arr, j, j + 1); } } } } public static void swap(int[] arr, int i, int j) { arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; arr[i] = arr[i] ^ arr[j]; } }
測試
排序前:[8, -2, 3, 9, 0, 1, 7, 6]
排序後:[-2, 0, 1, 3, 6, 7, 8, 9]
時間復雜度分析
1.可以看到,將比較次數相加起來(等差數列),其時間復雜度為O(n^2)
2.由於冒泡排序為相鄰兩者相互比較對調,並不會更改其原本排序的順序,所以是穩定排序法
數據結構與算法—冒泡排序(Java實現)