From f8b18c44a9aafb46614d925049bdba3159045565 Mon Sep 17 00:00:00 2001 From: willrlzhang Date: 2021年9月13日 16:39:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BF=AB=E6=8E=92=EF=BC=8C=20cpp=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- basic/sorting/QuickSort/Main.cpp | 80 +++++++++++++++++++++++++++++ basic/sorting/QuickSort/README.md | 83 +++++++++++++++++++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 basic/sorting/QuickSort/Main.cpp 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; +} +```

AltStyle によって変換されたページ (->オリジナル) /