BAN: Implement intro sort
This commit is contained in:
		
							parent
							
								
									d8ea0eeba3
								
							
						
					
					
						commit
						94e6b9fa65
					
				| 
						 | 
					@ -2,6 +2,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <BAN/Swap.h>
 | 
					#include <BAN/Swap.h>
 | 
				
			||||||
#include <BAN/Traits.h>
 | 
					#include <BAN/Traits.h>
 | 
				
			||||||
 | 
					#include <BAN/Math.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace BAN
 | 
					namespace BAN
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -100,4 +101,28 @@ namespace BAN
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						namespace detail::sort
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							template<typename It, typename Comp>
 | 
				
			||||||
 | 
							void intro_impl(It begin, It end, size_t max_depth, Comp comp)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (distance(begin, end) < 16)
 | 
				
			||||||
 | 
									return sort_insertion(begin, end, comp);
 | 
				
			||||||
 | 
								if (max_depth == 0)
 | 
				
			||||||
 | 
									return sort_heap(begin, end, comp);
 | 
				
			||||||
 | 
								It mid = detail::sort::partition(begin, end, comp);
 | 
				
			||||||
 | 
								intro_impl(begin, mid, max_depth - 1, comp);
 | 
				
			||||||
 | 
								intro_impl(++mid, end, max_depth - 1, comp);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						template<typename It, typename Comp = less<typename It::value_type>>
 | 
				
			||||||
 | 
						void sort_intro(It begin, It end, Comp comp = {})
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							size_t max_depth = Math::ilog2(distance(begin, end));
 | 
				
			||||||
 | 
							detail::sort::intro_impl(begin, end, max_depth, comp);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue