在講解歸併排序之前,我們必須先知道什麼是遞迴,因為在歸併排序中我們用到了遞迴。
什麼是遞迴呢?遞迴方法就是直接或者間接呼叫自身的方法。簡單來說就是自己呼叫自己的方法,用乙個條件去控制這個遞迴,防止進入死迴圈。
用乙個例子來說明遞迴。我們都學過階乘,當我們計算乙個乙個數字的階乘的時候不可能在程式中自己手動乙個個去計算,這個時候就可以根據階乘的規律性去寫乙個遞迴的方法:
核心方法:
if(n == 0)else
乙個遞迴呼叫可以導致更多的遞迴呼叫,因為這個方法繼續把每個子問題分解成新的子問題。要終止乙個遞迴方法,問題最後必須達到乙個終止條件。當問題達到這個終止條件時,就將結果返回給呼叫者。然後呼叫者進行計算並將結果返回給他自己的呼叫者。這個過程持續進行,直到結果傳回原始的呼叫者為止。關於遞迴更多的內容本人不過多解釋,有興趣的可以翻閱書籍,本章重點在歸併排序的講解。
歸併排序是一種比較另類一點的排序,既不屬於選擇排序,也不屬於交換排序,更不屬於插入排序。這種方法是運用分治法解決問題的型別。
歸併排序的基本思想是基於合併操作,即合併兩個已有的有序的序列是容易的,不論這兩個序列是順序儲存的還是鏈式儲存的,合併操作都可以在o(m+n)時間內完成(假設兩個有序表的長度分別為m和n)。
} //對兩個分隔的有序陣列進行排序
public static int merge(int first,int second) else
}while(fistposition < first.length)
while(secondposition < second.length)
return temp;
}方法mergesort建立乙個新陣列firstlist,該陣列是list前半部分。演算法在firstlist上遞迴呼叫mergesort。firstlist的length是list的length的一半,而secondlist 是list的前半部分,和firstlist的操作一樣。在firstlist和secondlist 都排序好以後把他合併成乙個新的陣列temp。最後將temp賦給原始陣列list。
歸併排序(java)
基本排序 歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。public class mergingsort return data 將陣列中left center,center 1 r...
Java 歸併排序
歸併排序 英語 merge sort 或mergesort 是建立在歸併操作上的一種有效的 排序演算法 時間複雜度為 o n log n 穩定排序。1945年由 約翰 馮 諾伊曼 首次提出。該演算法是採用 分治法 divide and conquer 的乙個非常典型的應用,且各層分治遞迴可以同時進行...
JAVA 歸併排序
歸併排序演算法思想 將乙個無序陣列分成兩部分,然後各個部分繼續分解,遞迴呼叫,直至子陣列天然有序 只有乙個數就是天然有序 然後自底向上,將每個子陣列一一合併,然後最後就合併成乙個有序的陣列。遞迴方法,分解無序陣列 遞迴呼叫該方法進行陣列的排序 param arr1 return public sta...