1. 程式人生 > >Merge演算法的兩種介面(C語言)

Merge演算法的兩種介面(C語言)

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 ; 
	}
}