- template <typename T>
- void Partition( CVector<T> &vec, int start, int end )
- {
- int left = start;
- int right = end;
- T key = vec[left];
- while( left < right )
- {
- while( key <=vec[right] && left < right )
- right--;
- vec[left] = vec[right];
- while( key >=vec[left] && left <right )
- left++;
- vec[right] = vec[left];
- }
- vec[left] = key;
- if( start < left-1 )
- Partition( vec, start, left-1 );
- if( left+1 < end )
- Partition( vec, left+1, end );
- }
- template <typename T>
- void QuickSort( CVector<T> &vec )
- {
- Partition( vec, 0, vec.GetSize()-1 );
- }
测试:
- #define DATA_MAGNITUDE 100
- double random(double start, double end)
- {
- return start+(end-start)*rand()/(RAND_MAX + 1.0);
- }
- int main(int argc, char **argv)
- {
- CVector<int> vec1(10,2);
- CVector<int> vec2(DATA_MAGNITUDE);
- CVector<char> vec_txt(1000,'a');
- //====================================================================
- srand( unsigned(time(0)));
- for ( int i=0; i<DATA_MAGNITUDE; i++ )
- {
- //vec2.PushBack( (int)rand()%DATA_MAGNITUDE );
- vec2.PushBack( (int)random(0, DATA_MAGNITUDE) );
- }
- unsigned int size = 20<DATA_MAGNITUDE? 20:DATA_MAGNITUDE;
- for ( size_t i =0; i < size; i++ )
- {
- cout<<vec2[i]<<" ";
- }
- cout<<endl;
- //InsertSort<int>( vec2, 0, vec2.GetSize()-1 );
- //BubbleSort<int>( vec2 );
- //SelectSort<int>( vec2 );
- //ShellSort<int>( vec2 );
- QuickSort<int>( vec2 );
- for ( size_t i =0; i < size; i++ )
- {
- cout<<vec2[i]<<" ";
- }
- cout<<endl;
- return 0;
- }