1. 程式人生 > >冒牌排序 快速排序 java 快速實現

冒牌排序 快速排序 java 快速實現

package com.robot.boot;

import java.util.Arrays;

/**
 * Created by Administrator on 2018-11-06.
 */
public class TestMethod {
    public static void main(String[] args) {
        int[] arr = {24, 46, 89, 41, 27, 63, 58, 41, 89};
//        System.out.println( bubblingArray(arr)); //氣泡排序

        //快速排序
      int start = 0;
        int end = arr.length - 1;
        fastSort(arr, start, end);
        System.out.println(Arrays.toString(arr));


    }

    /**
     * 氣泡排序
     * 實現簡單,但是運算複雜
     *
     * @param arr
     * @return
     */
    public static void bubblingArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length - 1; j++) {
                int temp = 0;
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }

    /**快速排序
     *    利用遞迴,從中1分為2,小的放左邊 大的放右邊
     *
     * @param a    陣列
     * @param low  開始位置
     * @param high 結束位置
     */
    public static void fastSort(int[] a, int low, int high) {
        int start = low;
        int end = high;
        int key = a[low];   //基準數
        while (end > start) {
            //從後往前比較
            while (end > start && a[end] >= key)
                //如果沒有比關鍵值小的,比較下一個,直到有比關鍵值小的交換位置,然後又從前往後比較
                end--;
            if (a[end] <= key) {
                int temp = a[end];
                a[end] = a[start];
                a[start] = temp;
            }
            //從前往後比較
            while (end > start && a[start] <= key)
                //如果沒有比關鍵值大的,比較下一個,直到有比關鍵值大的交換位置
                start++;
            if (a[start] >= key) {
                int temp = a[start];
                a[start] = a[end];
                a[end] = temp;
            }
            //此時第一次迴圈比較結束,關鍵值的位置已經確定了。左邊的值都比關鍵值小,右邊的值都比關鍵值大,但是兩邊的順序還有可能是不一樣的,進行下面的遞迴呼叫
        }
        //遞迴
        if (start > low) fastSort(a, low, start - 1);//左邊序列。第一個索引位置到關鍵值索引-1
        if (end < high) fastSort(a, end + 1, high);//右邊序列。從關鍵值索引+1到最後一個
    }
}

冒牌排序的時間複雜度 Bubble Sort:

時間複雜度  O(n²)   氣泡排序最好的時間複雜度為