//merge-sort
//input a[30]
//output a[30](ASC sequence)
//
#include "stdafx.h"
#include <time.h>
#include <iomanip>
#include<iostream>
using namespace std;
#define MAX 100
#define INFINITE 99999
void Merge(int* a,int p,int q,int r)
{
int n1,n2,z;
int *plhead,*prhead,*pl,*pr;
n1=q-p+2;
n2=r-q+1;
plhead=new int[n1];
prhead=new int[n2];
z=p;
pl=plhead;
while(z!=q+1)//对while循环的操作:1:初始化循环变量2:在while循环体中,变量操作3:在while循环体中,初始化下一次循环变量
*pl++=a[z++];
*pl=INFINITE;
z=q+1;
pr=prhead;
while(z!=r+1)
*pr++=a[z++];
*pr=INFINITE;
pl=plhead;
pr=prhead;
z=p;
while(*pl!=INFINITE&&*pr!=INFINITE)
{
if(*pl<*pr)
a[z++]=*pl++;
else
a[z++]=*pr++;
}
if(*pl==INFINITE)
while(*pr!=INFINITE)
a[z++]=*pr++;
else
while(*pl!=INFINITE)
a[z++]=*pl++;
delete[] plhead;
delete[] prhead;
}
void MergeSort(int* a, int p, int r)
{
if(p<r)
{
int q=(p+r)/2;
MergeSort(a,p,q);
MergeSort(a,q+1,r);
Merge(a,p,q,r);
// cout<<"("<<p<<","<<q<<")"<<setw(5)<<"("<<q+1<<","<<r<<")"<<setw(20)<<"merge: "<<p<<setw(3)<<r<<endl;
// cout<<setw(8)<<"abce"<<endl;setw()的作用是设置其后面的输出("abce")占8个字符,输出是空格空格空格空格abce
}
}
void main()
{
int a[MAX];
int i;
srand((unsigned)time(NULL));//产生一个随机数种子
for(i=0;i<MAX;i++)
{
RAND_MAX;
a[i]=rand()%MAX;//rand() 从0到RAND_MAX中的一个随机数,RAND_MAX是系统定义的宏#define RAND_MAX 0x7fff
cout<<a[i]<<" ";
}
cout<<endl;
MergeSort(a,0,MAX-1);
for(i=0;i<MAX;i++)
cout<<a[i]<<" ";
getchar();
}
//*p++;先操作*p,再把p+1个地址。
//(*p)++:把*p的内容加1
MergeSort
最新推荐文章于 2021-05-19 06:31:13 发布