简述
插入排序思想,假设对数组A[p...r]排序:
维持不变式:设当前排序的元素是 A[q],则保持A[p...q-1]为排好的,A[q]在A[p...q-1]中找到它的位置坐下
复杂度
- O(n^2)
- 原地排序
实现
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 |
template<typename Iterator,typename CompareType=std::less<typename std::iterator_traits<Iterator>::value_type>> void insert_sort(const Iterator begin,const Iterator end,CompareType compare=CompareType()) { //typedef typename std::iterator_traits<Iterator>::value_type T;// 迭代器指向对象的值类型 auto size = std::distance(begin,end); if (size <= 1) return; Iterator current = begin; while(++current != end) { auto small_next = current;//指向比*current小的元素中最大的那个元素 //current较小,则向前寻找插入的位置插入 while(small_next != begin && compare(*current,*(small_next-1))) { small_next--; } auto key = *current; auto iter = current; while (iter != small_next)//插入 { *iter = *(iter-1);//后移 iter--; } *(iter) = key; } } |
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 大话数据结构_算法相关&&AVL&&B树相关02/20
- ♥ 排序_冒泡排序05/08
- ♥ 匹配_Rabin_karp匹配算法10/15
- ♥ 查找_二分查找05/09
- ♥ 数据结构_二叉树节点10/16
- ♥ 匹配_朴素字符串匹配算法10/14