1. 程式人生 > >總結5種比較高效常用的排序演算法

總結5種比較高效常用的排序演算法

複製程式碼
public class MergeSortTest {
    public void sort(int[] array, int left, int right) {
        if (left >= right)
            return;
        // 找出中間索引
        int center = (left + right) / 2;
        // 對左邊陣列進行遞迴
        sort(array, left, center);
        // 對右邊陣列進行遞迴
        sort(array, center + 1, right);
        
// 合併 merge(array, left, center, right); // 列印每次排序結果 for (int i = 0; i < array.length; i++) { System.out.print(array[i] + "\t"); } System.out.println(); } /** * 將兩個陣列進行歸併,歸併前面2個數組已有序,歸併後依然有序 * * @param array * 陣列物件 *
@param left * 左陣列的第一個元素的索引 * @param center * 左陣列的最後一個元素的索引,center+1是右陣列第一個元素的索引 * @param right * 右陣列最後一個元素的索引 */ public void merge(int[] array, int left, int center, int right) { // 臨時陣列 int[] tmpArr = new int[array.length];
// 右陣列第一個元素索引 int mid = center + 1; // third 記錄臨時陣列的索引 int third = left; // 快取左陣列第一個元素的索引 int tmp = left; while (left <= center && mid <= right) { // 從兩個陣列中取出最小的放入臨時陣列 if (array[left] <= array[mid]) { tmpArr[third++] = array[left++]; } else { tmpArr[third++] = array[mid++]; } } // 剩餘部分依次放入臨時陣列(實際上兩個while只會執行其中一個) while (mid <= right) { tmpArr[third++] = array[mid++]; } while (left <= center) { tmpArr[third++] = array[left++]; } // 將臨時陣列中的內容拷貝回原陣列中 // (原left-right範圍的內容被複制回原陣列) while (tmp <= right) { array[tmp] = tmpArr[tmp++]; } } public static void main(String[] args) { int[] array = new int[] { 5, 69, 12, 3, 56, 789, 2, 5648, 23 }; MergeSortTest mergeSortTest = new MergeSortTest(); mergeSortTest.sort(array, 0, array.length - 1); System.out.println("排序後的陣列:"); for (int m = 0; m <= array.length - 1; m++) { System.out.print(array[m] + "\t"); } } }
複製程式碼