分類: c_c++ learning
algorithm learning
2013-07-25 22:11
240人閱讀收藏
舉報目錄(?)
[+]
歸併操作的工作原理如下:
第一步:申請空間,使其大小為兩個已經
排序序列之和,該空間用來存放合併後的序列
第二步:設定兩個
指標,最初位置分別為兩個已經
排序序列的起始位置
第三步:比較兩個
指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置
時間複雜度:
時間複雜度為o(nlogn) 這是該演算法中最好、最壞和平均的時間效能。
空間複雜度為 o(n)
比較操作的次數介於(nlogn) / 2和nlogn - n + 1。
賦值操作的次數是(2nlogn)。歸併演算法的
空間複雜度為:0 (n)
歸併排序比較占用記憶體,但卻效率高且穩定的演算法。
**實現
自頂向上實現:
//使用輔助陣列實現歸併的過程
[cpp]view plain
copy
void
mergesort(
int*aux,
int*data,
intl,
intm,
inth)
for(k=l; k<=h; k++)
data[k]=aux[k];
} 用遞迴實現排序的過程(自頂向下歸併)
[cpp]view plain
copy
void
sort(
int*aux,
int*data,
intl,
inth)
}
用非遞迴實現排序的過程(自底向上歸併)
[cpp]view plain
copy
void
nonrermersort(
int*aux,
int*data,
intl,
inth)
}
歸併排序 遞迴與非遞迴實現
歸併排序 採用的是一種分而治之的思想.過程 將乙個陣列進行二分,直到有每組有乙個元素為止.然後進行合併元素,按照一定的順序進行排序.實現 遞迴實現 void merge int arr,int left,int mid,int right,int tmp int start left int end...
歸併排序遞迴與非遞迴實現
基本思路 歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。歸併排序遞迴體,把整個序列遞迴分為兩個長度為1的子...
歸併排序(遞迴與非遞迴)的實現
摘要 1 歸併排序幾乎以o nlogn 的時間界實現,是典型的分治演算法 2 歸併排序的基本思路很簡單 就是將目標序列分為兩個部分,將兩個子串行排序好之後,再將它們合併。注意到合併兩個已排序的序列只需要o n 的時間界。3 對兩個子串行的排序顯然也是通過遞迴的歸併排序實現的。4 需要注意的乙個小細節...