歸併排序演算法 JAVA

2021-08-15 21:58:49 字數 1788 閱讀 6653

歸併排序演算法,先將陣列,遞迴二分,拆分成乙個個有序的陣列,然後合併;

/**

* @descript:歸併排序演算法

* * @author lanjonah 2023年2月28日

* @param array

* 需要排序的陣列

* @return

*/private static int mergesort(int array)

遞迴分治:

/**

* @descript:分組

* * @author lanjonah 2023年2月28日

* @param array

* 陣列

* @param begin

* 要排序的陣列起始索引

* @param end

* 要排序的陣列結尾索引

*/private static void sortarray(int array, int begin, int end)

合併:

比較二個數列的第乙個數,誰小就先取誰,取了後放到臨時數列。然後再進行比較,如果有數列為空,那直接將另乙個數列的資料依次放入臨時陣列末尾。

/**

* @descript:將兩個有序陣列合併

* * @author lanjonah 2023年2月28日

* @param array

* 陣列

* @param begin

* 起始索引

* @param mid

* 中間索引

* @param end

* 結尾索引

* @param tmp

* 臨時陣列

*/private static void mergearray(int array, int begin, int mid, int end,int tmp)

//當兩組陣列合併完了之後,如果左邊的陣列有剩餘的值,依次放到臨時陣列末尾

while(i<=m)

tmp[k++] = array[i++];

while(j<=n)

tmp[k++] = array[j++];

//將臨時陣列的資料放回原來的陣列

for(i=0; i

測試:public static void main(string args) ;

system.out.println("初始結果:" + arrays.tostring(array));

mergesort(array);

system.out.println("最終結果:" + arrays.tostring(array));

}

執行結果:

初始結果:[5, 1, 2, 13, 7, 8, 9, 11, 4]

過程陣列:[1, 5]

過程陣列:[2, 13]

過程陣列:[1, 2, 5, 13]

過程陣列:[7, 8]

過程陣列:[4, 11]

過程陣列:[4, 9, 11]

過程陣列:[4, 7, 8, 9, 11]

過程陣列:[1, 2, 4, 5, 7, 8, 9, 11, 13]

最終結果:[1, 2, 4, 5, 7, 8, 9, 11, 13]

Java 歸併排序演算法

歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。歸併排序 歸併...

java排序演算法 歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divideand conquer 的乙個非常典型的應用。在討論歸併排序演算法之前,先來看乙個小問題,對於兩個有序陣列,如何合併成乙個有序陣列問題。public static voidmerge intaa,intbb else...

排序演算法 歸併排序 (java)

歸併排序,顧名思義,就是將資料進行合併,我們首先將待排陣列分成兩個子串行,然後在對其單個序列進行排序,不斷遞迴到只有兩個元素的子串行,然後再向上返回,最中得到的是兩個有序的子串行,最後我們通過乙個輔助陣列,遍歷這兩個陣列,挑選出較小的元素將其放在輔助陣列中,這樣我們就會在輔助陣列中將數排好序了,然後...