#include <iostream>
using namespace std;
void Merge( int nArray[], int nArrayResult[], int low, int mid, int high )
{
int i = low;
int j = mid + 1;
int k = 0;
while( i <= mid && j <= high )
{
if ( nArray[i] > nArray[j] )
{
nArrayResult[k++] = nArray[j++];
}
else
{
nArrayResult[k++] = nArray[i++];
}
}
//合并剩下的
while( i <= mid )
{
nArrayResult[k++] = nArray[i++];
}
while( j <= high )
{
nArrayResult[k++] = nArray[j++];
}
}
void MergeSort( int nArray[], int low, int high )
{
if ( ( high - low ) <= 1 )
{
if ( nArray[low] > nArray[high] )
{
int nTemp = nArray[low];
nArray[low] = nArray[high];
nArray[high] = nTemp;
}
}
else
{
int mid = ( low + high ) / 2;
MergeSort( nArray, low, mid );
MergeSort( nArray, mid + 1, high );
int* pArrayTemp = new int[high-low+1];
Merge( nArray, pArrayTemp, low, mid, high );
for( int i = 0; i < high-low+1; ++i )
{
nArray[low+i] = pArrayTemp[i];
}
if ( NULL != pArrayTemp )
{
delete pArrayTemp;
pArrayTemp = NULL;
}
}
}
void PrintArray( int nArray[], int nCount )
{
for( int i = 0; i < nCount; ++i )
{
cout << nArray[i] << " ";
}
cout << endl;
}
int main()
{
int nArray[] = { 1, 2, 9, 10, 11, 10, 12, 4, 3, 12, 65, 32, 23, 33, 45, 55, 55, 34, 34, 23, 2 };
MergeSort( nArray, 0, _countof(nArray)-1 );
PrintArray( nArray, _countof(nArray) );
return 0;
}
作者:山丘儿
转载请标明出处,谢谢。原文地址:http://blog.csdn.net/s634772208/article/details/46603735