Merge演算法的兩種介面(C語言)
阿新 • • 發佈:2018-12-29
1.一種是在三個陣列中實現,即把兩個有序的數組合併到另一個數組中。
程式碼如下:
void Merge(int *A, int f, int m, int e){ int temp[e-f+1]; int i,first=f,last=m+1; for(i=0;i<(e-first+1)&&f<=m&&last<=e;i++){ if(A[f]<=A[last]) { temp[i]=A[f]; f++; } else { temp[i]=A[last]; last++; } } while(f>m&&last<=e){ temp[i]=A[last]; i++; last++; } while(f<=m&&last>e){ temp[i]=A[f]; i++; f++; } for(i=0;first<=e;i++,first++){ A[first]=temp[i]; } }
2.第二種是在一個數組內完成的,即在一個數組中連續的,有序的兩部分有序地合併起來。
程式碼如下:
void Merge(int *a,int a_length,int *b,int b_length,int *c){//a,b為有序陣列,c為合併陣列 int i,al,bl; for(i=0,al=0,bl=0;al<a_length&&bl<b_length;i++){ if(a[al]<=b[bl]){ c[i]=a[al]; al++; } else{ c[i]=b[bl]; bl++; } } while(al<a_length){ c[i]=a[al]; i++; al++; return ; } while(bl<b_length){ c[i]=b[bl]; i++; bl++; return ; } }