归并排序算法

自己想找找归并排序怎么实现的,结果在网上居然没找到一个能用的归并排序的算法,经过自己的琢磨,现在写出了下面的算法。

void MergeArray(int *a,int first,int middle,int last)
{
	int n1 = middle-first;
	int n2 = last - middle-1;//注意此处的长度
	int *L = new int[n1+1];
	int *R = new int[n2+1];
	int i , j ,k;
	for(i = 0;i<=n1;i++)
		L[i] = a[first+i];
	for(j = 0;j<=n2;j++)
		R[j] = a[middle+j+1];
	
	k = 0,i=0,j=0;
	while(i<=n1 &&j<=n2)
	{
		if(L[i]<R[j])
			a[first+i+j] = L[i++];
		else
			a[first+i+j] = R[j++];
	}
	while(i<=n1)
	{
		a[first+i+j] = L[i++];
	}
	while(j<=n2)
	{
		a[first+i+j] = R[j++];
	}
	delete []L;
	delete []R;
}
void mergesort(int *a, int first, int last)  
{  
	if(first>=last)
		return;
    if(first<last)
	{
		int mid = (first + last) / 2;  
        mergesort(a, first, mid);    //左边有序  
        mergesort(a, mid + 1, last); //右边有序  
        MergeArray(a, first, mid, last); //再将二个有序数列合并 
	}
}
void MergeSort(int *a, int n)  
{  
    mergesort(a,0,n-1); 
	
} 
void PrintArray(int *b)
{
	for(int i = 0;i<10;i++)
	{
		cout<<b[i]<<"  ";
	}
	cout<<endl;
}
int main()
{
	int a[10];
	for(int k = 0;k<5;k++)
	{
		for(int i = 0;i<10;i++)
		{
			a[i] = rand()%100;
		}
		cout<<"排序前:";
		PrintArray(a);
		//QSort(a,0,9);
		MergeSort(a,10);
		cout<<"排序后:";
		PrintArray(a);
		cout<<endl;
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值