快速算法实现方法

[cpp]  view plain copy
  1. template <typename T>  
  2. void Partition( CVector<T> &vec, int start, int end )  
  3. {  
  4.     int left = start;  
  5.     int right = end;  
  6.     T key = vec[left];  
  7.      
  8.     while( left < right )  
  9.     {  
  10.         while( key <=vec[right] && left < right )  
  11.             right--;  
  12.         vec[left] = vec[right];  
  13.   
  14.         while( key >=vec[left] && left <right )  
  15.             left++;  
  16.         vec[right] = vec[left];  
  17.     }  
  18.   
  19.     vec[left] = key;  
  20.   
  21.     if( start < left-1 )  
  22.         Partition( vec, start, left-1 );  
  23.     if( left+1 < end )  
  24.         Partition( vec, left+1, end );  
  25. }  
  26.   
  27. template <typename T>  
  28. void QuickSort( CVector<T> &vec )  
  29. {  
  30.     Partition( vec, 0, vec.GetSize()-1 );  
  31. }  

测试:

[cpp]  view plain copy
  1. #define  DATA_MAGNITUDE 100  
  2.   
  3. double random(double start, double end)  
  4. {  
  5.     return start+(end-start)*rand()/(RAND_MAX + 1.0);  
  6. }  
  7.   
  8. int main(int argc, char **argv)  
  9. {  
  10.     CVector<int> vec1(10,2);  
  11.     CVector<int> vec2(DATA_MAGNITUDE);  
  12.     CVector<char> vec_txt(1000,'a');  
  13.   
  14.     //====================================================================  
  15.     srand( unsigned(time(0)));  
  16.     for ( int i=0; i<DATA_MAGNITUDE; i++ )  
  17.     {  
  18.         //vec2.PushBack( (int)rand()%DATA_MAGNITUDE );  
  19.         vec2.PushBack( (int)random(0, DATA_MAGNITUDE) );  
  20.     }  
  21.     unsigned int size = 20<DATA_MAGNITUDE? 20:DATA_MAGNITUDE;  
  22.     for ( size_t i =0; i < size; i++ )  
  23.     {  
  24.         cout<<vec2[i]<<" ";  
  25.     }  
  26.     cout<<endl;  
  27.   
  28.     //InsertSort<int>( vec2, 0, vec2.GetSize()-1 );  
  29.     //BubbleSort<int>( vec2 );  
  30.     //SelectSort<int>( vec2 );  
  31.     //ShellSort<int>( vec2 );  
  32.     QuickSort<int>( vec2 );  
  33.     for ( size_t i =0; i < size; i++ )  
  34.     {  
  35.         cout<<vec2[i]<<" ";  
  36.     }  
  37.     cout<<endl;  
  38.     return 0;
  39. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值