快速排序[涂鸦]
2007-07-05 00:10 老博客哈 阅读(744) 评论(3) 收藏 举报
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 );
}
}


浙公网安备 33010602011771号