template <typename Type>
inline void Swap( Type &a, Type &b )


{
Type tmp = a;
a = b;
b = tmp;
}

template <typename Type>
int Partition( Type data[], int start, int end )


{
int i = start;
int j = end;
int tmp = data[start];
while( i < j )

{
do

{
i++;
}while( data[i] < tmp );
do

{
j--;
}while( data[j] > tmp);

if( i < j )
Swap( data[i], data[j] );
}
data[start] = data[j];
data[j] = tmp;
return j;
}

template <typename Type>
void QuickSort( Type data[], int i, int j )


{
if( i < j )

{
int mid = Partition( data, i, j );
QuickSort( data, i, mid );
QuickSort( data, mid + 1, j );
}
}

/////////////////////////////////////////////////////////////////////////////////
为了使得最坏情况下有着较好的性能, 可以在快排中采用随机算法
template <typename Type>
void QuickSort( Type data[], int i, int j )


{
if( i < j )

{
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 );
}
}