您好,登錄后才能下訂單哦!
java 基本算法之歸并排序?qū)嵗a
原理:歸并(Merge)排序法是將兩個(或兩個以上)有序表合并成一個新的有序表,
* 即把待排序序列分為若干個子序列,每個子序列是有序的。
* 然后再把有序子序列合并為整體有序序列。
實例代碼:
public class MergeSort { /** * * * * @param args */ public static void main(String[] args) { int a[] = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 5, 4, 62, 99, 98, 54, 56, 17, 18, 23, 34, 15, 35, 25, 53, 51 }; sort(a, 0, a.length - 1); System.out.println(Arrays.toString(a)); } public static void sort(int[] data, int left, int right) { if (left < right) { // 找出中間索引 int center = (left + right) / 2; // 對左邊數(shù)組進(jìn)行遞歸 sort(data, left, center); // 對右邊數(shù)組進(jìn)行遞歸 sort(data, center + 1, right); // 合并 merge(data, left, center, right); } } public static void merge(int[] data, int left, int center, int right) { int[] tmpArr = new int[data.length]; int mid = center + 1; // third記錄中間數(shù)組的索引 int third = left; int tmp = left; while (left <= center && mid <= right) { // 從兩個數(shù)組中取出最小的放入中間數(shù)組 if (data[left] <= data[mid]) { tmpArr[third++] = data[left++]; } else { tmpArr[third++] = data[mid++]; } } // 剩余部分依次放入中間數(shù)組 while (left <= center) { tmpArr[third++] = data[left++]; } while (mid <= right) { tmpArr[third++] = data[mid++]; } // 將中間數(shù)組中的內(nèi)容復(fù)制回原數(shù)組 while (tmp <= right) { data[tmp] = tmpArr[tmp++]; } System.out.println(Arrays.toString(data)); } }
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。