您好,登錄后才能下訂單哦!
Java中怎么實現歸并排序 ,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
public class MergeSort { static int number=0; public static void main(String[] args) { int[] a = {26, 5, 98, 108, 28, 99, 100, 56, 34, 1 }; printArray("排序前:",a); MergeSort(a); printArray("排序后:",a); } private static void printArray(String pre,int[] a) { System.out.print(pre+"\n"); for(int i=0;i<a.length;i++) System.out.print(a[i]+"\t"); System.out.println(); } private static void MergeSort(int[] a) { // TODO Auto-generated method stub System.out.println("開始排序"); Sort(a, 0, a.length - 1); } private static void Sort(int[] a, int left, int right) { if(left>=right) return; int mid = (left + right) / 2; //二路歸并排序里面有兩個Sort,多路歸并排序里面寫多個Sort就可以了 Sort(a, left, mid); Sort(a, mid + 1, right); merge(a, left, mid, right); } private static void merge(int[] a, int left, int mid, int right) { int[] tmp = new int[a.length]; int r1 = mid + 1; int tIndex = left; int cIndex=left; // 逐個歸并 while(left <=mid && r1 <= right) { if (a[left] <= a[r1]) tmp[tIndex++] = a[left++]; else tmp[tIndex++] = a[r1++]; } // 將左邊剩余的歸并 while (left <=mid) { tmp[tIndex++] = a[left++]; } // 將右邊剩余的歸并 while ( r1 <= right ) { tmp[tIndex++] = a[r1++]; } System.out.println("第"+(++number)+"趟排序:\t"); // TODO Auto-generated method stub //從臨時數組拷貝到原數組 while(cIndex<=right){ a[cIndex]=tmp[cIndex]; //輸出中間歸并排序結果 System.out.print(a[cIndex]+"\t"); cIndex++; } System.out.println(); } }
看完上述內容,你們掌握Java中怎么實現歸并排序 的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。