fork(1) download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. template< typename T, typename C >
  7. void quicksort( std::vector< T >& array, int hi, int lo, C comp )
  8. {
  9.  
  10. while( hi > lo) {
  11. int i = lo;
  12. int j = hi;
  13.  
  14. do {
  15. // while( array[ i ] < array[ lo ] && i < j ) i++;
  16. // while( array[ --j ] > array[ lo ] );
  17.  
  18. while( comp( array[ i ], array[ lo ] ) && ( i < j ) ) i++;
  19. while( !comp( array[ --j ], array[ lo ] ) );
  20.  
  21. if( i < j )
  22. std::swap( array[ i ], array[ j ] );
  23.  
  24. }while( i < j );
  25.  
  26. std::swap( array[ lo ], array[ j ] );
  27.  
  28. if( j - lo > hi - ( j + 1 ) ) {
  29. quicksort( array, j - 1, lo, comp );
  30. lo = j + 1;
  31. }
  32. else {
  33. quicksort( array, hi, j + 1, comp );
  34. hi = j - 1;
  35. }
  36. }
  37. }
  38.  
  39. int main() {
  40.  
  41. vector< int > v = { 4, 7, 2 };
  42.  
  43. quicksort( v, 3, 0, []( int a, int b ) -> bool { return ( a > b )? true : false; } );
  44.  
  45. return 0;
  46. }
Runtime error #stdin #stdout 0s 3468KB
stdin
Standard input is empty
stdout
Standard output is empty