Merge Sort

来源:互联网 发布:java缓存技术 redis 编辑:程序博客网 时间:2024/05/20 05:25

//MergeSort

//Time Complexity O(n^2)

//Space Complexity O(n) 


template< int Length >

void Merge( int SortData[Length],  int TargetData[Length], int p, int q, int r )

{

int i = p;

int j = q+1;

int t = p;

while( i<=q && j <=r )

{

if( SortData[ i] < SortData[j] )

{

TargetData[t] = SortData[i];

++t;

++i;

}

else

{

TargetData[t] = SortData[j];

++t;

++j;

}

}

while( i<=q )

{

TargetData[t] = SortData[i];

++t; ++i;

}

while( j<=r )

{

TargetData[t] = SortData[j];

++t; ++j

}

}

template< int Length >

void MergeSort( int SortData[Length], int TargetData[Length], int p, int r )

{

if( r > p )

{

int q= ( r + p )/2;

MergeSort( SortData, TargetData, p, q);

MergeSort( SortData, TargetData, q+1, r );

Merge( SortData, TargetData, p, q, r );

}

}

void main( const char* arg )

{

int SortData[] = {0, 389, -1, 489, 3};

int TargetData[sizeof(SortData)/sizeof( int )] = {0};

MergeSort( SortData, TargetData, 0, sizeof(SortData)/sizeof(int) );

}

0 0