歸併排序Java實現

2021-08-20 15:06:41 字數 1011 閱讀 7905

今天學習到了新演算法,歸併排序;歸併排序演算法的思想和快速排序有點類似;但仔細一想區別還是挺大;

歸併排序(從下往上):將陣列分為n個長度為2的陣列,然後再將相鄰陣列合併排序,直到合併為完整陣列;

我寫歸併的思路:

1、將整個陣列分成n個長度為len的子陣列(len初始值為2)

2、分別對子陣列排序;

3、遞迴合併相鄰陣列,重複1,2;每次遞迴len*2;

4、遞迴出口:len>陣列長度;

public void merge(inta,int length) 		

/***

* 在這裡選擇:插入排序,因為合併的相鄰陣列相對有序

* @param a

* @param i 陣列起始位置

* @param len

*/public void pp(inta ,int i,int len)

a[j] = xx;

j=x;

} }

感覺還有太多地方需要改進;其中插入排序這個地方還是可以改進的;

整體感覺歸併的這種寫法不好,這次就先寫到這裡,明天有空改進了再寫

***************==20180611*************************

對於上面演算法的改進,沒有什麼動力。因為這種改進,沒有對自己思考上的提公升;

下面來看下

歸併排序的另一種解法:

1、將陣列二分;

2、遞迴,繼續將2個子陣列二分;

3、出口right >mid;

先看**:

public static void merge1(inta,int left,int mid,int right) 

merge(a,left,mid,right);//對陣列在[left,right]區間的排序

}

看到**之後自然不難理解為什麼出口條件的設定;

這個方法最精髓的地方,就是巧妙的利用遞迴將陣列二分;

歸併排序 Java實現

歸併排序 mergesort 1 思想 多次將兩個或兩個以上的有序表合併成乙個新的有序表。2 演算法時間複雜度 最好的情況下 一趟歸併需要n次,總共需要logn次,因此為o n logn 最壞的情況下,接近於平均情況下,為o n logn 說明 對長度為n的檔案,需進行logn 趟二路歸併,每趟歸併...

Java實現歸併排序

剛開始接觸歸併排序的時候,感覺挺困難的,但是仔細的分析之後,就會發現它的原理還是蠻簡單的 就是借助另外的乙個陣列空間將左右兩側 從中間mid處劃分 已經排序好的原陣列轉到新的陣列空間。如下圖所示 轉移操作時,就是左右所指的資料進行比較,將較小的資料 由小到大排序 儲存到新的陣列空間。如下圖所示 了解...

Java實現歸併排序

思想就是 將陣列分成兩個陣列,如果兩個陣列的元素都是有序的,那麼就可以很方便的將這兩組資料歸併。如果沒有序繼續將兩組陣列分組,以此類推,當組內只有乙個資料時,認為這個小組內已經有序,然後合併相鄰兩個小組就可以。package sort 歸併排序 2015 05 31 public class mer...