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