归并排序修改----能够排负数

前几天写的归并排序算法是不想输入具体的待排序数的个数,数组输入完毕后,用-1结束。这样一来程序不能排-1,有些不是很爽,算了,就在前面加个带输入数组的长度吧。代码如下:

#include<iostream>
using namespace std;
int a[100];
int flag;
int n;

void vector_initial();
void print_vector();
void MERGE_sort(int p,int r);
void MERGE_combine(int p,int q,int r);

int main()
{	
	vector_initial();
	MERGE_sort(0,n);
	print_vector();
	return 0;
}

void vector_initial()
{	int i=0;
	cout<<"请输入要排序的数的个数:";
	cin>>n;
	while(i<n)
	{
	
		cin>>a[i];
		i++;
	}
	n=n-1;
}
void print_vector()
{
for(int i=0;i<n;i++)
	cout<<a[i]<<" ";
cout<<a[n]<<endl;
}
void MERGE_sort(int p,int r)//归并排序
{	int q;
	if(p<r)
	{
		q=(p+r)/2;
		MERGE_sort(p,q);
		MERGE_sort(q+1,r);
		MERGE_combine(p,q,r);
	}
}

void MERGE_combine(int p,int q,int r)
{
	int L[100];
	int R[100];
	int n1=q-p+1;
	int n2=r-q;
	for(int i=1;i<=n1;i++)
		L[i]=a[p+i-1];
	for(int j=1;j<=n2;j++)
		R[j]=a[q+j];
	L[n1+1]=10000;
	R[n2+1]=10000;
	i=1;j=1;
	for (int k=p;k<=r;k++)
	{
		if(L[i]<=R[j])
		{
			a[k]=L[i];
			i++;
		}
		else
		{
			a[k]=R[j];
			j++;
		}
	}
}

  

posted @ 2014-10-16 11:05  liu_ty10  阅读(255)  评论(0编辑  收藏  举报