代码改变世界

快速排序[涂鸦]

2007-07-05 00:10  老博客哈  阅读(737)  评论(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 );  
    }

}