const int LEN = 20;
void MergeSort(){
int data[LEN];
int data2[LEN];
for(int i=0;i<LEN;++i){
data[i] = rand()%100;
}
for(int i=0;i<LEN;++i)
cout<<data[i]<<" ";
cout<<endl;
int step = 1;
for(;step<LEN;step *= 2){
for(int start = 0;start < LEN;start += 2*step){
int preindex = start;
int preend = start + step;
int postindex = start + step;
int postend = (postindex+step<LEN)?(postindex+step):(LEN);
int tmpindex = 0;
while(preindex < preend && postindex < postend){
if(data[preindex] < data[postindex]){
data2[tmpindex++] = data[preindex++];
}
else{
data2[tmpindex++] = data[postindex++];
}
}
while(preindex < preend)
data2[tmpindex++] = data[preindex++];
while(postindex < postend)
data2[tmpindex++] = data[postindex++];
for(int i=0;i<tmpindex;++i)
data[start+i] = data2[i];
}
}
for(int i=0;i<LEN;++i)
cout<<data[i]<<" ";
cout<<endl;
}