手动写了下快速排序算法的简单实现,没有考虑当子数组小于阀值(例如nLast-nFirst < 7)时进行选择排序等优化。
#include "stdafx.h"
#include <iostream>
#include <time.h>
void Swap( int* pFirst, int* pSecond )
{
int nTemp = *pFirst;
*pFirst = *pSecond;
*pSecond = nTemp;
}
int Partition( int* pArray, int nFirst, int nLast )
{
// Random of three point
int nMid = (nFirst + nLast)/2;
if( pArray[nFirst] > pArray[nLast] )
{
Swap( &pArray[nFirst], &pArray[nLast] );
}
if( pArray[nMid] > pArray[nLast] )
{
Swap( &pArray[nMid], &pArray[nLast] );
}
if( pArray[nMid] > pArray[nFirst] )
{
Swap( &pArray[nMid], &pArray[nFirst] );
}
int nDivValue = pArray[nFirst];
while( nFirst < nLast )
{
while( nFirst < nLast &&
nDivValue < pArray[nLast] )
{
nLast--;
}
if( nFirst < nLast )
{
pArray[nFirst] = pArray[nLast];
nFirst++;
}
while( nFirst < nLast &&
pArray[nFirst] < nDivValue )
{
nFirst++;
}
if( nFirst < nLast)
{
pArray[nLast] = pArray[nFirst];
nLast--;
}
}
pArray[nFirst] = nDivValue;
return nFirst;
}
void QuickSort( int* pArray, int nFirst, int nLast )
{
if( nFirst < nLast )
{
int nDivision = Partition( pArray, nFirst, nLast );
QuickSort( pArray, nFirst, nDivision - 1 );
QuickSort( pArray, nDivision + 1, nLast );
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int nDataArray[50];
srand((unsigned)time(0));
for( int i = 0; i < 50; i++ )
{
nDataArray[i] = rand()%50;
}
printf("Source Array: \n");
for( int i = 0; i < 50; i++ )
{
printf("%d, ", nDataArray[i] );
if( i%10 == 9 )
{
printf("\n");
}
}
QuickSort( nDataArray, 0, 49 );
printf("Sorted Array: \n");
for( int i = 0; i < 50; i++ )
{
printf("%d, ", nDataArray[i] );
if( i%10 == 9 )
{
printf("\n");
}
}
return 0;
}