Skip to content

Commit fe0aac0

Browse files
committed
sort.cpp
1 parent 602c8ff commit fe0aac0

1 file changed

Lines changed: 52 additions & 7 deletions

File tree

section0/sort.cpp

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,56 @@
66

77
#include <iostream>
88
#include <algorithm>
9+
#include <functional>
910
#include <vector>
1011

1112
using 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+
1347
int 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

Comments
 (0)