-
Notifications
You must be signed in to change notification settings - Fork 0
/
sorting.cpp
88 lines (73 loc) · 1.72 KB
/
sorting.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <algorithm>
#include <iostream>
#include <iterator>
#include <functional>
#include <vector>
template <class It>
void badSort(It first, It last)
{
for (It i = first; i != last; ++i)
{
for (It k = i; k != last; ++k)
{
if (*k < *i)
{
std::iter_swap(i, k);
}
}
}
}
template <class It, class Cmp>
void badSort(It first, It last, Cmp cmp)
{
for (It i = first; i != last; ++i)
{
for (It k = i; k != last; ++k)
{
if (cmp(*k, *i))
{
std::iter_swap(i, k);
}
}
}
}
// or std::greater<>
struct Great
{
bool operator()(int a, int b) const
{
return a > b;
}
};
template <class T>
struct CountingLess
{
int Count = 0;
bool operator()(T a, T b)
{
++Count;
return a < b;
}
};
int main()
{
std::vector<int> v = {15, 25, -11, 10, 13};
badSort(v.begin(), v.end());
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
Great gr;
badSort(v.begin(), v.end(), gr);
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
CountingLess<int> less;
badSort(v.begin(), v.end(), std::ref(less));
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
std::cout << "less.Count = " << less.Count << std::endl;
less.Count = 0;
sort(v.begin(), v.end(), std::ref(less));
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
std::cout << "less.Count = " << less.Count << std::endl;
return 0;
}