1. 程式人生 > >歸並排序實現

歸並排序實現

區域 分治 歸並排序 空間 void 時區 amp || star

public void Merge(int[] a, int start, int mid, int end)
        {
            int[] tmp = new int[end - start + 1];    // tmp是匯總2個有序區的臨時區域
            int i = start;            // 第1個有序區的索引
            int j = mid + 1;        // 第2個有序區的索引
            int k = 0;                // 臨時區域的索引

            while (i <= mid && j <= end)
            {
                
if (a[i] <= a[j]) { tmp[k++] = a[i++]; } else { tmp[k++] = a[j++]; } } while (i <= mid) { tmp[k++] = a[i++]; }
while (j <= end) { tmp[k++] = a[j++]; } // 將排序後的元素,全部都整合到數組a中。 for (i = 0; i < k; i++) { a[start + i] = tmp[i]; } tmp = null; } public void MergeSort(int[] a, int
start, int end) { if (a == null || start >= end) return; int mid = (end + start) / 2; MergeSort(a, start, mid); // 遞歸排序a[start...mid] MergeSort(a, mid + 1, end); // 遞歸排序a[mid+1...end] // a[start...mid] 和 a[mid...end]是兩個有序空間, // 將它們排序成一個有序空間a[start...end] Merge(a, start, mid, end); }

歸並排序(合並排序)的實現。使用分治法用遞歸來實現排序。

歸並排序實現