66
77#include < iostream>
88#include < algorithm>
9+ #include < functional>
910#include < vector>
1011
1112using namespace std ;
1213
14+ template <typename T>
15+ void quick_sort_impl (T& v, int left, int right)
16+ {
17+ auto quick_partition = [](decltype (v)& arr, int left, int right)
18+ {
19+ int key = arr[right];
20+ int i = left - 1 ;
21+ int j = left;
22+
23+ for (; j < right; j++)
24+ {
25+ if (arr[j] < key)
26+ {
27+ std::swap (arr[j], arr[++i]);
28+ }
29+ }
30+
31+ std::swap (arr[right], arr[++i]);
32+
33+ return i;
34+ };
35+
36+ if (left > right)
37+ {
38+ return ;
39+ }
40+
41+ int mid = quick_partition (v, left, right);
42+
43+ quick_sort_impl (v, left, mid - 1 );
44+ quick_sort_impl (v, mid + 1 , right);
45+ }
46+
1347int main ()
1448{
1549 std::vector<int > v = {42 ,9 ,4 ,2 ,5 ,10 ,1 ,0 };
50+ int len = v.size ();
1651
1752 // -----------------------------
1853
1954 auto bubble_sort = [=]() mutable
2055 {
21- int len = v.size ();
22-
2356 for (int i = 0 ;i < len - 1 ; i++)
2457 {
25- for (int j = 0 ; j < len - i - 1 ; j ++)
58+ for (int j = 0 ; j < len - i - 1 ; j++)
2659 {
2760 if (v[j] > v[j + 1 ])
2861 {
@@ -45,8 +78,6 @@ int main()
4578
4679 auto select_sort = [=]() mutable
4780 {
48- int len = v.size ();
49-
5081 for (int i = 0 ; i < len - 1 ; i++)
5182 {
5283 int min = i;
@@ -75,8 +106,6 @@ int main()
75106
76107 auto insert_sort = [=]() mutable
77108 {
78- int len = v.size ();
79-
80109 int i, j;
81110 for (i = 0 ;i < len; i++)
82111 {
@@ -98,4 +127,20 @@ int main()
98127 };
99128
100129 insert_sort ();
130+
131+ // -----------------------------
132+
133+ auto quick_sort = [=]() mutable
134+ {
135+ quick_sort_impl (v, 0 , len - 1 );
136+
137+ for (auto & x : v)
138+ {
139+ cout << x << ' ,' ;
140+ }
141+
142+ cout << endl;
143+ };
144+
145+ quick_sort ();
101146}
0 commit comments