-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinsert_sort.hpp
More file actions
45 lines (44 loc) · 1.28 KB
/
Copy pathinsert_sort.hpp
File metadata and controls
45 lines (44 loc) · 1.28 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
template<typename T>
void insert_sort(const T beg,const T end){
if(beg!=end){
for(T it = beg+1;it!=end;++it){
if(*it < *(it-1)){
typename std::remove_reference<decltype(*it)>::type temp = std::move(*it);
for(T it1 = it-1; it1 >= beg; --it1){
if(temp < *it1)
*(it1+1) = std::move(*it1);
else{
*(it1+1) = std::move(temp);
break;
}
if(it1 == beg){
*it1 = std::move(temp);
break;
}
}
}
}
}
}
template<typename T, typename Bin>
void insert_sort(const T beg,const T end,Bin binary){
if(beg!=end){
for(T it = beg+1;it!=end;++it){
if(binary(*it,*(it-1))){
typename std::remove_reference<decltype(*it)>::type temp = std::move(*it);
for(T it1 = it-1; it1 >= beg; --it1){
if(binary(temp,*it1))
*(it1+1) = std::move(*it1);
else{
*(it1+1) = std::move(temp);
break;
}
if(it1 == beg){
*it1 = std::move(temp);
break;
}
}
}
}
}
}