-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmerge_sort.cpp
More file actions
88 lines (73 loc) · 1.7 KB
/
merge_sort.cpp
File metadata and controls
88 lines (73 loc) · 1.7 KB
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 <iostream>
#include <vector>
#include <random> // for random number generator
#include <algorithm>
using it = std::vector<int>::iterator;
using intv = std::vector<int>;
void merge(it start, it mid, it finish){
intv left;
intv right;
it i;
for(i = start;i <= mid; i++){
left.push_back(*i);
}
for(;i < finish; i++){
right.push_back(*i);
}
it left_start = left.begin();
it left_end = left.end();
it right_start = right.begin();
it right_end = right.end();
while(left_start != left_end && right_start != right_end){
if(*left_start <= *right_start){
*start = *left_start;
++left_start;
}else{
*start = *right_start;
++right_start;
}
++start;
}
while(left_start < left_end){
*start = *left_start;
++start;
++left_start;
}
while(right_start < right_end){
*start = *right_start;
start++;
right_start++;
}
}
void merge_sort(it start, it finish){
it mid = start;
if(start < finish){
std::advance(mid, std::distance(start, finish)/2);
merge_sort(start, mid);
merge_sort(mid+1, finish);
merge(start, mid, finish);
}
}
// random generator function
int randomfunc(int j)
{
return rand() % j;
}
int main(){
intv ramdom_nums(100);
std::iota(ramdom_nums.begin(), ramdom_nums.end(),0);
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(ramdom_nums.begin(), ramdom_nums.end(), g);
std::cout << "Before sorting \n";
for(const auto & i : ramdom_nums){
std::cout << i << ' ';
}
merge_sort(ramdom_nums.begin(), ramdom_nums.end());
std::cout << "\nafter sorting \n";
for(const auto & i : ramdom_nums){
std::cout << i << ' ';
}
std::cout << '\n';
return 0;
}