1. 程式人生 > >從零開始學習算法之歸並排序[1](2.2歸並排序)

從零開始學習算法之歸並排序[1](2.2歸並排序)

並排 步驟 blog ++ 序列 else [1] 操作 歸並排序

歸並排序思想為將序列每相鄰兩個數字進行歸並操作(merge),形成floor(n/2)個序列,排序後每個序列包含兩個元素將上述序列再次歸並,形成floor(n/4)個序列,每個序列包含四個元素重復步驟2,直到所有元素排序完畢。

下列代碼為單次歸並的函數,可作為模板用於代碼中。

PS:其中前段為第p位到第q位,後段為第q+1位到第r位。

 1 void Merge(int p,int q,int r){
 2     int n1 = q - p + 1;
 3     int n2 = r - q;
 4     long long L[n1],R[n2];
 5     for(int i = 0
;i < n1;i++) L[i] = A[i+p]; 6 for(int i = 0;i < n2;i++) R[i] = A[i+q+1]; 7 L[n1] = 100000000;R[n2] = 100000000; 8 int i = 0;int j = 0; 9 for(int k = p;k <= r;k++){ 10 if(L[i] < R[j]) A[k] = L[i++]; 11 else A[k] = R[j++]; 12 } 13 }

從零開始學習算法之歸並排序[1](2.2歸並排序)