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

手动写了下快速排序算法的简单实现,没有考虑当子数组小于阀值(例如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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值