#include "stdio.h"
#include "time.h"
#include "stdlib.h"
void MergeSort(int a[], int n);
void MergePass(int x[], int y[],int s, int n);
void Merge(int c[],int d[],int le,int mid,int ri);
void main(){
int a[100];
int i = 0;
srand(time(NULL));
for(i = 0; i< 100; i++)
{
a[i] = rand() % 100;
printf("%d,", a[i]);
}
MergeSort(a,100);
printf("\n\n");
for(i = 0; i< 100; i++)
{
printf("%d,", a[i]);
}
getchar();
}
void MergeSort(int a[], int n){
//int *b =(int *) malloc(n * sizeof(int));
int *b = new int[n];
int s = 1;
while(s < n){
MergePass(a,b,s,n);
s += s;
MergePass(b,a,s,n);
s += s;
}
}
void MergePass(int x[], int y[],int s, int n){
int i = 0;
int j = 0;
while(i <= n - 2*s){
Merge(x,y,i,i+s-1,i+2*s-1);
i = i + 2*s;
}
if(i + s < n)
Merge(x,y,i,i+s-1,n-1);
else
{
for ( j = i; j <= n-1; j++ )
y[j] = x[j];
}
}
void Merge(int c[],int d[],int le,int mid,int ri){
int i = le, j = mid+1, k = le;
int q = 0;
while( (i <= mid) && ( j <= ri)){
if( c[i] <= c[j])
d[k++] = c[i++];
else
d[k++] = c[j++];
}
if( i > mid){
for( q = j; q <= ri; q++)
d[k++] = c[q];
}
else{
for( q = i; q <= mid; q++)
d[k++] = c[q];
}
}
#include "time.h"
#include "stdlib.h"
void MergeSort(int a[], int n);
void MergePass(int x[], int y[],int s, int n);
void Merge(int c[],int d[],int le,int mid,int ri);
void main(){
int a[100];
int i = 0;
srand(time(NULL));
for(i = 0; i< 100; i++)
{
a[i] = rand() % 100;
printf("%d,", a[i]);
}
MergeSort(a,100);
printf("\n\n");
for(i = 0; i< 100; i++)
{
printf("%d,", a[i]);
}
getchar();
}
void MergeSort(int a[], int n){
//int *b =(int *) malloc(n * sizeof(int));
int *b = new int[n];
int s = 1;
while(s < n){
MergePass(a,b,s,n);
s += s;
MergePass(b,a,s,n);
s += s;
}
}
void MergePass(int x[], int y[],int s, int n){
int i = 0;
int j = 0;
while(i <= n - 2*s){
Merge(x,y,i,i+s-1,i+2*s-1);
i = i + 2*s;
}
if(i + s < n)
Merge(x,y,i,i+s-1,n-1);
else
{
for ( j = i; j <= n-1; j++ )
y[j] = x[j];
}
}
void Merge(int c[],int d[],int le,int mid,int ri){
int i = le, j = mid+1, k = le;
int q = 0;
while( (i <= mid) && ( j <= ri)){
if( c[i] <= c[j])
d[k++] = c[i++];
else
d[k++] = c[j++];
}
if( i > mid){
for( q = j; q <= ri; q++)
d[k++] = c[q];
}
else{
for( q = i; q <= mid; q++)
d[k++] = c[q];
}
}