forked from Bananymous/banan-os
BAN: Implement quick sort
This commit is contained in:
parent
08bc0a2815
commit
19604015de
|
@ -43,15 +43,26 @@ namespace BAN
|
||||||
template<typename It, typename Comp = less<typename It::value_type>>
|
template<typename It, typename Comp = less<typename It::value_type>>
|
||||||
void sort_quick(It begin, It end, Comp comp = {})
|
void sort_quick(It begin, It end, Comp comp = {})
|
||||||
{
|
{
|
||||||
{
|
if (begin == end || next(begin, 1) == end)
|
||||||
It it = begin;
|
return;
|
||||||
if (it == end || ++it == end)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
It mid = detail::sort_quick_partition(begin, end, comp);
|
It mid = detail::sort_quick_partition(begin, end, comp);
|
||||||
sort_quick(begin, mid, comp);
|
sort_quick(begin, mid, comp);
|
||||||
sort_quick(++mid, end, comp);
|
sort_quick(++mid, end, comp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename It, typename Comp = less<typename It::value_type>>
|
||||||
|
void sort_insertion(It begin, It end, Comp comp = {})
|
||||||
|
{
|
||||||
|
if (begin == end)
|
||||||
|
return;
|
||||||
|
for (It it1 = next(begin, 1); it1 != end; ++it1)
|
||||||
|
{
|
||||||
|
typename It::value_type x = move(*it1);
|
||||||
|
It it2 = it1;
|
||||||
|
for (; it2 != begin && comp(x, *prev(it2, 1)); --it2)
|
||||||
|
*it2 = move(*prev(it2, 1));
|
||||||
|
*it2 = move(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue