泛型插入排序

原创 2007年09月18日 00:25:00

#pragma once

#include <iterator>

#include <functional>

 

 

   template< 

      class bidirectional_iterator,

      template<class> class greater_compare = std::greater

   >

   class insertion_sort_functor

   {

   public:

      bool operator()(bidirectional_iterator first, bidirectional_iterator last)const

      {

        typedef bidirectional_iterator::value_type value_type;

        typedef greater_compare<value_type> gc;

        gc gc_comparer;

 

        bidirectional_iterator j = next_iterator(first);

 

        for( ; j!=last ; ++j)

        {

           value_type key = *j;

 

           bidirectional_iterator i = last_iterator(j);

 

           while(std::distance(first,i)>0 && gc_comparer(*i,key) )

           {

              *next_iterator(i) = *i;

              --i;

           }

 

           if(i == first && gc_comparer(*i,key))

           {

              *next_iterator(i) = *i;

              *i = key;

              continue;

           }

 

           *next_iterator(i)= key;

        }

 

        return true;

      }

   private:

      bidirectional_iterator last_iterator(const bidirectional_iterator& i)const

      {

        bidirectional_iterator j(i);

        return --j;

      }

 

 

      bidirectional_iterator next_iterator(const bidirectional_iterator& i)const

      {

        bidirectional_iterator j(i);

        return ++j;

      }

   };

 

测试程序

      int a[]={345,67,56,6,4567467,65768,7686,-34635,67,57678,-235};

      vector<int> vi(a,a+sizeof(a)/sizeof(int));

      list<int> li(a,a+sizeof(a)/sizeof(int));

 

      insertion_sort(a ,sizeof(a)/sizeof(int));

 

      insertion_sort_functor<vector<int>::iterator, std::less>()

        (vi.begin(), vi.end());

 

      insertion_sort_functor<list<int>::iterator, std::greater>()

        (li.begin(), li.end());

 

 

相关文章推荐

java泛型排序之插入排序

package cqychen.algorithms.part01.charpter01; import java.util.ArrayList; import java.util.Scanner...

C++实现插入排序

  • 2017年11月02日 22:26
  • 712B
  • 下载

插入排序(C语言实现)

  • 2014年11月30日 16:12
  • 926B
  • 下载

插入排序 渐增型算法

版本1:整型数组版本 /* * 渐增型算法_插入排序 * 版本1:整型数组版本 */ import java.util.Arrays; public class T01_渐增型算...

插入排序的方法

  • 2013年07月10日 12:12
  • 31KB
  • 下载

直接插入排序的C实现

  • 2013年05月16日 11:20
  • 495B
  • 下载

java排序之一插入排序(一个方法同时给整型和字符串排序)

关于直接插入排序的理解和思路 首先从其定义来理解: 插入排序:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 算法描述: 1、一个待排数组分成两部分:第一个...

插入排序源代码

  • 2013年07月31日 08:39
  • 585B
  • 下载

直接插入排序

  • 2014年03月25日 15:22
  • 1.02MB
  • 下载

算法学习—001—js实现插入排序—insertSort

插入排序:对于少量元素比较有效。 工作方式:像排序一手扑克牌,开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:泛型插入排序
举报原因:
原因补充:

(最多只允许输入30个字)