您的位置:首页 > 理论基础 > 数据结构算法

数据结构笔记-快速排序简单实现

2012-11-26 23:50 591 查看
手动写了下快速排序算法的简单实现,没有考虑当子数组小于阀值(例如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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: