冒牌排序 快速排序 java 快速實現
阿新 • • 發佈:2018-12-19
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²) 氣泡排序最好的時間複雜度為