1. 程式人生 > >數據結構與算法—冒泡排序(Java實現)

數據結構與算法—冒泡排序(Java實現)

數據結構 算法 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實現)