歸併排序主要是二路歸併排序。
二路歸併排序的基本思想是:設陣列a中存放了n個資料元素,初始時把它們看成是n個長度為1的有序子陣列,然後從第乙個子陣列開始,把相臨的子陣列兩兩合併,得到n/2個長度為2的新的有序子陣列(當n為奇數時最後乙個新的子陣列長度為1);對這些新的子陣列再兩兩合併;如此重複,直到得到乙個長度為n的有序陣列為止。
歸併排序是高效演算法中唯一
穩定的排序演算法。多用於外部排序,較少用於內部排序。
對於n個元素的陣列,將這n個元素看作葉子節點,將兩兩歸併生成的子集看作它們的父節點,則歸併過程對應於由葉子節點向根節點生成的一棵二叉樹的過程。所以,歸併趟數約等於二叉樹的高度減1,即
時間複雜度為
空間複雜度為o(n)。
package sort;
public class mergesort ;
mergesort(a,0,a.length-1);
for(int i=0;i
//歸併
public static void merge(int a, int start, int mid, int end)
while(i!=mid+1)
while(j!=end+1)
for(i=start; i<=end; i++)
a[i] = temp[i];
} //歸併排序
public static void mergesort(int a, int start, int end)
}}
輸出:18 25 30 36 45 72 排序演算法之歸併排序(Java實現)
歸併排序的思想是將區域性有序的陣列合併為乙個大的有序陣列,前提是需要保證區域性陣列有序,如果區域性沒有順序,那麼就拆分,再合併,最差的情況是,拆到兩個陣列都只有乙個元素的時候,這時候再合併他們就成了乙個有序的陣列。涉及到演算法上,就是將陣列直接分為兩部分low mid,mid 1 high,其中mi...
排序演算法之 合併排序 歸併排序(Java實現)
合併排序是一種典型的分治法演算法。先把陣列拆成兩個陣列,對兩個陣列進行繼續拆分,直到能夠對拆分後的兩個結果分別進行排序。也就是說,拆分後,使兩邊都是排好序的。顯然當拆分到兩邊只剩下乙個的時候,自然就是有序的。拆分過後是合併,合併也是這個演算法的核心過程,其實就好比是兩副牌,這兩副牌已經是有序的,要把...
排序演算法 歸併排序 java實現
歸併排序指的是將兩個已經排序的序列合併成乙個序列的操作。主要分為兩種,分別是自頂向下的排序方式和自底向上的排序方式。對於自頂向下的排序演算法 採用分治法進行自頂向下的程式設計方式,分治法的核心思想就是分解 求解 合併。1 將長度為n的無序序列平均分割成兩個子串行 2 對這兩個子串行分別進行歸併排序 ...