排序演算法:二路歸併排序(java)
阿新 • • 發佈:2019-01-01
public class MergeSort { /** * * @param array 待排序陣列 * @param temp 輔助陣列 * @param start 開始下標 * @param end 結束下標 */ public void sort(int[] array, int[] temp, int start, int end){ if (start >= end)return; int mid = (start + end)/2; // 解決左邊子問題 sort(array, temp, start, mid); // 解決右邊子問題 sort(array, temp, mid + 1, end); // 合併兩個子問題 merge(array, temp, start, end, mid); } /** * * @param array 待排序陣列 * @param temp 輔助陣列 * @param start 開始下標 * @param end 結束下標 * @param mid 中點下標(start + end)/2 */ public void merge(int[] array, int[] temp, int start, int end, int mid) { int i,j,k; i = start; j = mid + 1; k = start; while (i <= mid && j <= end){ if (array[i] < array[j]){ temp[k++] = array[i++]; }else { temp[k++] = array[j++]; } } // 若左子陣列還有元素 while (i <= mid){ temp[k++] = array[i++]; } // 若右子陣列還有元素 while (j <= end){ temp[k++] = array[j++]; } //將輔助陣列的元素一一對應copy到原陣列 for (int index = start; index <= end; index++){ array[index] = temp[index]; } } }