快速排序[涂鸦]

 

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

}
posted @ 2007-07-05 00:10 农夫三拳 阅读(381) 评论(3)  编辑 收藏 所属分类: C++

  回复  引用    
#1楼 2007-08-18 00:35 | dolphinwyh [未注册用户]
感觉Mid值用随机函数去取好点...
欢迎来我的Blog来踩踩!
  回复  引用  查看    
#2楼 [楼主]2007-08-18 16:50 | 农夫三拳      
@dolphinwyh
好的
  回复  引用  查看    
#3楼 2007-09-18 09:18 | 至尊王者      
呵呵,支持下
!!

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: