首页 > 代码库 > 归并排序修改----能够排负数

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

前几天写的归并排序算法是不想输入具体的待排序数的个数,数组输入完毕后,用-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++;		}	}}

  

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