歸併排序利用分治思想:將乙個大問題分為很多個小問題來處理
具體思想:將無序陣列採用遞迴的思想一直等分,直到將無需陣列分為每組只有乙個元素,那麼這時就自然有序了,分組之後需要進行合併,將分組之後的陣列按照一定的順序進行合併最後合併成的這個序列就是有序的
private
static
void
mergesortinternal
(int
arr,
int low,
int high)
//分割槽
mergesortinternal
(arr,low,mid)
;mergesortinternal
(arr,mid+
1,high)
;//合併
merge
(arr,low,mid,high)
;}
合併過程:
private
static
void
merge
(int
arr,
int p,
int s,
int q)
else
}while
(i <= s)
//如果j至q區間還有元素,但i至s區間通過比較已經沒有元素
while
(j <= q)
//將臨時陣列的元素拷貝到原來陣列
for(
int t =
0;t < q-p+
1;t++
)}
合併圖:
在合併的過程中通過開闢臨時空間的方法來幫我們儲存當前已經排好序的陣列,在合併結束後將臨時空間的資料拷貝給原來的陣列
分析:穩定性:穩定
時間複雜度:o(nlogn)
空間複雜度:o(n)
歸併排序總結
歸併排序是利用分治思想,分開後一步一步歸併的過程。基本思路就是將陣列分成二組a,b,如果這二組組內的資料都是有序的,那麼就可以很方便的將這二組資料進行排序。可以將a,b組各自再分成二組。依次類推,當分出來的小組只有乙個資料時,可以認為這個小組組內已經達到了有序,然後再合併相鄰的二個小組就可以了。這樣...
歸併排序 總結
歸併排序的思想是把陣列不斷分割成兩半,然後不斷合併,具體就是先遞迴將陣列分成兩半分別排序,然後將結果歸併起來。分割的過程屬於遞迴行為,而合併過程用到了外排序的方法。外排序 用兩個指標指向兩個已排好序的陣列,申請乙個大小為n n為兩個陣列大小的和,n最大為原始陣列的大小 的陣列,把指標指向較小的數放進...
歸併排序總結
歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。過程描述 歸併...