<pre name="code" class="cpp">#include<iostream>
#include<cstdlib>
#include<ctime>
#include<iomanip>
using namespace std;
void Display(int A[],int n)
{
for(int i=0;i<n;i++)
{
cout<<setw(3)<<setiosflags(ios::right)<<A[i]<<" ";
if((i+1)==0)
{
cout<<endl;
}
}
cout<<endl;
}
//合并连个已经排序的子序列
void MERGE(int A[],int low,int mid,int high)
{
int n1 = mid - low +1;
int n2 = high - mid;
int *L;
int *R;
int i,j,k;
L = (int*)malloc((unsigned)sizeof(int)*(n1+1));
R = (int*)malloc((unsigned)sizeof(int)*(n2+1));
for(i=0;i<n1;i++)
L[i] = A[low+i];
for(j=0;j<n2;j++)
R[j]=A[mid+j+1]; //下标:mid+j+1
L[n1] = INT_MAX;
R[n2] = INT_MAX;
for(k=low,i=0,j=0;k<high+1;k++)
{
if(L[i]>R[j])
{
A[k] = R[j];
j++;
}
else
{
A[k] = L[i];
i++;
}
}
free(L);
free(R);
}
//归并排序
void MERGE_SORT(int A[],int left,int right)
{
int temp;
if(left<right)
{
temp = (left+right)/2;
MERGE_SORT(A,left,temp);
MERGE_SORT(A,temp+1,right);
MERGE(A,left,temp,right);
}
}
int main()
{
int A[100];
srand(time(NULL));
for(int i=0;i<100;i++)
A[i] = rand()%1000;
cout<<"\t\t随机产生的序列..."<<endl;
Display(A,100);
cout<<endl<<endl;
MERGE_SORT(A,0,99);
cout<<"\t\t排序后..."<<endl;
Display(A,100);
return 0;
}
归并排序算法实现
最新推荐文章于 2022-03-12 11:00:00 发布