java實現的歸併排序詳解

來源:互聯網
上載者:User

歸併排序的基本原理為:

一:拆分,假設有N個元素的列表,將這個列表拆分成2個或兩個以上元素組成的新的列表,然後分別對子列表進行排序

二:歸併,把所有的排好序的子類表兩兩歸併,如此重複,直到歸併成一個含N個有序列表為止

歸併排序其實和快速排序都是同一種思想的排序演算法,其採用的都是分治法的基本思想,即:將問題分解成一個個小的問題,分而治之。

public class Mergesort {/* * leftPos左數組的第一個元素的下標 * leftEnd左數組的最後一個元素的下標 * rightPos右數組第一個元素的下標 * rightEnd 右數組最後一個元素的下標*/private static <Integer extends Comparable<? super Integer>> void meger(int []a,int[]tmpArray,int  leftPos,int rightPos,int rightEnd){int leftEnd = rightPos-1;int tmpPos = leftPos;int numElements = rightEnd - leftPos +1;//將兩數組最最小的放入數組tmpArrray中while(leftPos<=leftEnd&&rightPos<=rightEnd){if(a[leftPos]-(a[rightPos])<=0){tmpArray[tmpPos++] = a[leftPos++];}else{tmpArray[tmpPos++]=a[rightPos++];}}//兩數組中的另外一個數組的元素放入temArray中while(leftPos<=leftEnd){tmpArray[tmpPos++]=a[leftPos++];}while(rightPos<=rightEnd){tmpArray[tmpPos++]=a[rightPos++];}//將中間數組中的內容複寫回原數組for(int i=0;i<numElements;i++,rightEnd--){a[rightEnd]=tmpArray[rightEnd];}for(int i = 0;i<tmpArray.length;i++){System.out.print(tmpArray[i]+",");}System.out.println();}/* * left 待排數組的第一個元素的索引 * right 待排數組的最後一個元素的索引 * a 待排數組 * tmpArray 歸併後的數組 * center左邊數組的最後一個元素的下標 */private static <Integer extends Comparable <? super Integer>> void mergeSort(int[]a,int []tmpArray,int left,int right){if(left<right){int center =(left+right)/2;//對左邊數組進行遞迴,在遞迴的過程中直到將左邊數組拆分成元素為一的新的數組mergeSort(a,tmpArray,left,center);//對左邊數組進行遞迴,在遞迴的過程中直到將右邊數組拆分成元素為一的新的數組mergeSort(a,tmpArray,center+1,right);//合并數組meger(a,tmpArray,left,center+1,right);}}public static void main(String[] args) {Mergesort sort = new Mergesort();int num[]={5,7,3,8,1,4,9,2,6};int num2[] = new int[9];sort.mergeSort(num, num2, 0, num.length-1);for (int i = 0; i < num2.length; i++) {System.out.print(num2[i]+",");}System.out.println();for (int i = 0; i < num2.length; i++) {System.out.print(num[i]+",");}}}輸出結果為:每次數組合并之後的結果:5,7,0,0,0,0,0,0,0, 3,5,7,0,0,0,0,0,0, 3,5,7,1,8,0,0,0,0, 1,3,5,7,8,0,0,0,0, 1,3,5,7,8,4,9,0,0, 1,3,5,7,8,4,9,2,6, 1,3,5,7,8,2,4,6,9, 1,2,3,4,5,6,7,8,9,所有數組合并完成之後的數組 1,2,3,4,5,6,7,8,9,原有的數組排序之後: 1,2,3,4,5,6,7,8,9, 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.