TheAlgorithms/C++
1.0.0
All the algorithms implemented in C++
Toggle main menu visibility
Loading...
Searching...
No Matches
dnf_sort.cpp
Go to the documentation of this file.
1
12
13
#include <algorithm>
14
#include <cassert>
15
#include <cstdint>
16
#include <iostream>
17
#include <vector>
18
23
namespace
sorting
{
30
namespace
dnf_sort
{
38
template
<
typename
T>
39
std::vector<T>
dnfSort
(
const
std::vector<T> &in_arr) {
40
std::vector<T> arr(in_arr);
41
uint64_t lo = 0;
42
uint64_t hi = arr.size() - 1;
43
uint64_t mid = 0;
44
45
// Iterate till all the elements
46
// are sorted
47
while
(mid <= hi) {
48
switch
(arr[mid]) {
49
// If the element is 0
50
case
0:
51
std::swap(arr[lo++], arr[mid++]);
52
break
;
53
54
// If the element is 1 .
55
case
1:
56
mid++;
57
break
;
58
59
// If the element is 2
60
case
2:
61
std::swap(arr[mid], arr[hi--]);
62
break
;
63
}
64
}
65
return
arr;
66
}
67
}
// namespace dnf_sort
68
}
// namespace sorting
69
74
static
void
test
() {
75
// 1st test
76
// [1, 0, 2, 1] return [0, 1, 1, 2]
77
std::vector<uint64_t> array1 = {0, 1, 1, 2};
78
std::cout <<
"Test 1... "
;
79
std::vector<uint64_t> arr1 =
sorting::dnf_sort::dnfSort
(array1);
80
assert(std::is_sorted(std::begin(arr1), std::end(arr1)));
81
std::cout <<
"passed"
<< std::endl;
82
// 2nd test
83
// [1, 0, 0, 1, 1, 0, 2, 1] return [0, 0, 0, 1, 1, 1, 1, 2]
84
std::vector<uint64_t> array2 = {1, 0, 0, 1, 1, 0, 2, 1};
85
std::cout <<
"Test 2... "
;
86
std::vector<uint64_t> arr2 =
sorting::dnf_sort::dnfSort
(array2);
87
assert(std::is_sorted(std::begin(arr2), std::end(arr2)));
88
std::cout <<
"passed"
<< std::endl;
89
// 3rd test
90
// [1, 1, 0, 0, 1, 2, 2, 0, 2, 1] return [0, 0, 0, 1, 1, 1, 1, 2, 2, 2]
91
std::vector<uint64_t> array3 = {1, 1, 0, 0, 1, 2, 2, 0, 2, 1};
92
std::cout <<
"Test 3... "
;
93
std::vector<uint64_t> arr3 =
sorting::dnf_sort::dnfSort
(array3);
94
assert(std::is_sorted(std::begin(arr3), std::end(arr3)));
95
std::cout <<
"passed"
<< std::endl;
96
// 4th test
97
// [2, 2, 2, 0, 0, 1, 1] return [0, 0, 1, 1, 2, 2, 2]
98
std::vector<uint64_t> array4 = {2, 2, 2, 0, 0, 1, 1};
99
std::cout <<
"Test 4... "
;
100
std::vector<uint64_t> arr4 =
sorting::dnf_sort::dnfSort
(array4);
101
assert(std::is_sorted(std::begin(arr4), std::end(arr4)));
102
std::cout <<
"passed"
<< std::endl;
103
}
104
109
int
main
() {
110
test
();
// execute the test
111
return
0;
112
}
test
void test()
Definition
caesar_cipher.cpp:100
sorting::dnf_sort::dnfSort
std::vector< T > dnfSort(const std::vector< T > &in_arr)
The main function implements DNF sort.
Definition
dnf_sort.cpp:39
main
int main()
Main function.
Definition
generate_parentheses.cpp:110
dnf_sort
Functions for the DNF sort implementation.
sorting
for working with vectors
sorting
dnf_sort.cpp
Generated by
1.18.0