diff --git a/basic/sorting/QuickSort/Main.cpp b/basic/sorting/QuickSort/Main.cpp new file mode 100644 index 0000000000000..2872c33a589ee --- /dev/null +++ b/basic/sorting/QuickSort/Main.cpp @@ -0,0 +1,80 @@ +#include +#include + +using namespace std; +void printvec( const vector &vec, const string &strbegin = "", const string &strend = "" ) +{ + cout << strbegin << endl; + for ( auto val : vec ) + { + cout << val << "\t"; + } + + cout << endl; + cout << strend << endl; +} + + +int partition( vector & vec, int left, int right ) +{ + if ( left >= right ) + { + return left; + } + + int base = vec[left]; + while ( left < right ) + { + while ( left < right && vec[right] >= base ) + { + right--; + } + if ( left >= right ) + { + break; + } + + vec[left] = vec[right]; + + while ( left < right && vec[left] <= base ) + { + left++; + } + + if ( left >= right ) + { + break; + } + + vec[right] = vec[left]; + } + + vec[left] = base; + return left; +} + + +void quicksort( vector & vec, int left, int right ) +{ + if ( left >= right ) + { + return; + } + + int idx = partition( vec, left, right ); + quicksort( vec, left, idx - 1 ); + quicksort( vec, idx + 1, right ); +} + + +int main( void ) +{ + vector vec = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; + printvec( vec ); + quicksort( vec, 0, vec.size() - 1 ); + printvec( vec, "after insert sort" ); + return 0; +} + + + diff --git a/basic/sorting/QuickSort/README.md b/basic/sorting/QuickSort/README.md index e6cd4e32e8710..25dbaedf8c7c5 100644 --- a/basic/sorting/QuickSort/README.md +++ b/basic/sorting/QuickSort/README.md @@ -288,4 +288,87 @@ fn main() -> io::Result<()> { } ``` + + +**C++** + +```c++ +#include +#include + +using namespace std; +void printvec( const vector &vec, const string &strbegin = "", const string &strend = "" ) +{ + cout << strbegin << endl; + for ( auto val : vec ) + { + cout << val << "\t"; + } + + cout << endl; + cout << strend << endl; +} + + +int partition( vector & vec, int left, int right ) +{ + if ( left >= right ) + { + return left; + } + + int base = vec[left]; + while ( left < right ) + { + while ( left < right && vec[right] >= base ) + { + right--; + } + if ( left >= right ) + { + break; + } + + vec[left] = vec[right]; + + while ( left < right && vec[left] <= base ) + { + left++; + } + + if ( left >= right ) + { + break; + } + + vec[right] = vec[left]; + } + + vec[left] = base; + return left; +} + + +void quicksort( vector & vec, int left, int right ) +{ + if ( left >= right ) + { + return; + } + + int idx = partition( vec, left, right ); + quicksort( vec, left, idx - 1 ); + quicksort( vec, idx + 1, right ); +} + + +int main( void ) +{ + vector vec = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; + printvec( vec ); + quicksort( vec, 0, vec.size() - 1 ); + printvec( vec, "after insert sort" ); + return 0; +} +```