您好,登錄后才能下訂單哦!
算法描述:對于給定的一組記錄,首先將每兩個相鄰的長度為1的子序列進行歸并,得到 n/2(向上取整)個長度為2或1的有序子序列,再將其兩兩歸并,反復執行此過程,直到得到一個有序序列。
package sorting; /** * 歸并排序 * 平均O(nlogn),最好O(nlogn),最壞O(nlogn);空間復雜度O(n);穩定;較復雜 * @author zeng * */ public class MergeSort { public static void merge(int[] a, int start, int mid, int end) { int[] tmp = new int[a.length]; System.out.println("merge " + start + "~" + end); int i = start, j = mid + 1, k = start; while (i != mid + 1 && j != end + 1) { if (a[i] < a[j]) tmp[k++] = a[i++]; else tmp[k++] = a[j++]; } while (i != mid + 1) tmp[k++] = a[i++]; while (j != end + 1) tmp[k++] = a[j++]; for (i = start; i <= end; i++) a[i] = tmp[i]; for (int p : a) System.out.print(p + " "); System.out.println(); } static void mergeSort(int[] a, int start, int end) { if (start < end) { int mid = (start + end) / 2; mergeSort(a, start, mid); // 左邊有序 mergeSort(a, mid + 1, end); // 右邊有序 merge(a, start, mid, end); } } public static void main(String[] args) { int[] b = { 49, 38, 65, 97, 76, 13, 27, 50 }; mergeSort(b, 0, b.length - 1); } }
運行結果看一下:
總結
以上就是本文關于Java排序算法之歸并排序簡單實現的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。