template <typename Type>
inline void Swap( Type &a, Type &b )
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
Type tmp = a;
a = b;
b = tmp;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
template <typename Type>
int Partition( Type data[], int start, int end )
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
int i = start;
int j = end;
int tmp = data[start];
while( i < j )
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
do
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
i++;
}while( data[i] < tmp );
do
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
j--;
}while( data[j] > tmp);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if( i < j )
Swap( data[i], data[j] );
}
data[start] = data[j];
data[j] = tmp;
return j;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
template <typename Type>
void QuickSort( Type data[], int i, int j )
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if( i < j )
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
int mid = Partition( data, i, j );
QuickSort( data, i, mid );
QuickSort( data, mid + 1, j );
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
/////////////////////////////////////////////////////////////////////////////////
为了使得最坏情况下有着较好的性能, 可以在快排中采用随机算法
template <typename Type>
void QuickSort( Type data[], int i, int j )
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if( i < j )
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if( j - i > 5 )
Swap( data[i], data[ rand() % ( j - i ) + i ] );
int mid = Partition( data, i, j );
QuickSort( data, i, mid );
QuickSort( data, mid + 1, j );
}
}