`
zhangyafei_kimi
  • 浏览: 265618 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

泛型插入排序

阅读更多

#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());

分享到:
评论

相关推荐

    c++ 选择排序 插入排序 快速排序

    选择排序、插入排序和快速排序都是经典的排序算法,各有其特点和适用场景。接下来,我们将详细探讨这三个排序算法。 1. **选择排序(Selection Sort)** 选择排序是一种简单直观的排序算法。它的基本思想是在未...

    各种排序算法的c++泛型实现

    C++作为一门强大且广泛应用的编程语言,其泛型编程能力使得我们可以编写出通用的排序算法,适用于不同类型的数据。以下是对"各种排序算法的C++泛型实现"这个主题的详细解析。 1. **C++ 泛型编程**: C++中的模板是...

    插入 冒泡 快速 排序算法C++模板实现

    本主题聚焦于三种常见的排序算法:插入排序、冒泡排序和快速排序,这些算法都已被实现为C++模板,使得可以应用于各种数据类型。 **插入排序(Insertion Sort)**是一种简单直观的排序算法,它的工作原理类似于我们...

    详解Java中使用泛型实现快速排序算法的方法

    值得注意的是,上述代码没有考虑优化措施,例如三数取中法选择枢轴,或者使用插入排序处理小规模数据等。这些优化可以进一步提升快速排序的性能,尤其是在处理已经部分有序的数据时。在实际项目中,为了提高算法效率...

    采用各种排序算法,支持任意类型数据的小型排序系统

    本项目是一个小型的排序系统,其核心特点在于能够处理任意类型的数据,并且采用了五种不同的排序算法,包括冒泡排序、选择排序、插入排序、快速排序以及堆排序。下面将详细探讨这些知识点。 首先,**泛型**是Java...

    Java集合框架及泛型

    6. **Collections**: 这是一个包含各种集合操作的工具类,如排序、查找、翻转等。提供的算法类包括`sort()`, `binarySearch()`, `reverse()`, `shuffle()`等。 泛型是Java中处理类型安全的一种方式,允许我们在类、...

    可反转排序的泛型字典类

    3. **性能优化**:为了平衡排序和查找性能,实现可能会利用一些数据结构,比如平衡二叉搜索树,以确保高效的插入、删除和查找操作。 4. **遍历接口**:为了方便遍历排序后的元素,可能提供了`GetEnumerator()`方法...

    泛型自定义数组大小

    - **数组的排序**:如果需要对泛型数组进行排序,可以利用Java的`Collections.sort()`方法(对于集合)或`Arrays.sort()`方法(对于数组),但需要注意,数组的元素必须实现了`Comparable`接口或提供自定义的`...

    8.7泛型容器代码.zip

    - **TreeMap**:有序映射,基于红黑树实现,键和值按照特定顺序排序。 在压缩包中的文件,如 `Test.java`、`HomeWork.java`、`HomeWork2.java` 和 `SimpleHomeWork.java`,可能是包含了使用泛型和容器的实例代码,...

    集合框架及泛型资料

    集合框架与泛型是Java编程语言中的核心概念,它们极大地提高了代码的可读性、安全性和效率。在Java中,集合框架是一组接口和类,它们提供了存储和操作对象的统一方式。泛型则是Java 5引入的一个特性,用于在编译时...

    集合与泛型

    ### 集合与泛型知识点总结 #### 泛型概览 - **引入原因**:在Java 1.5及之后的版本中,引入了泛型这一特性,旨在提高集合类使用的安全性与灵活性。主要解决的问题包括: - **元素存储的安全性问题**:在非泛型...

    MFC做的排序

    在这里,我们将深入探讨MFC如何实现几种常见的排序算法:快速排序、冒泡排序、直接插入排序、直接选择排序以及折半插入排序。 1. **快速排序**: 快速排序是一种高效的分治算法,由C.A.R. Hoare在1960年提出。其...

    学士后Java集合框架和泛型课后习题答案

    TreeSet则按照元素的自然排序或比较器提供的排序进行排序,其内部基于TreeMap实现。 4. **泛型**:泛型允许我们在类、接口和方法中声明类型参数,从而创建可以处理多种类型的集合。例如,ArrayList中的E就是一个...

    ssh通用泛型DAO

    1. 插入(Insert):使用`save()`或`saveOrUpdate()`方法将实体对象持久化到数据库。 2. 更新(Update):通过`update()`方法更新已存在的实体对象。 3. 删除(Delete):使用`delete()`方法删除指定ID的实体对象。 ...

    集合框架与泛型课件

    LinkedHashSet保持了元素的插入顺序,而TreeSet则按照元素的自然排序或自定义比较器进行排序。 **Queue**接口用于表示先进先出(FIFO)的数据结构,常用于队列操作。LinkedList可以作为Queue的实现,另外还有...

    C#泛型 调研报告 C#泛型

    - **类型安全性**:泛型确保在编译时就能检查类型错误,防止不兼容类型的数据被插入到泛型容器中,从而提高了代码的稳定性。 - **性能提升**:由于泛型的类型信息在运行时可用,编译器能够生成更优化的IL代码,...

    泛型与集合类.pdf

    Java泛型是一种参数化类型机制,允许在编译时提供类型检查和消除类型转换。它主要用于集合框架中,以确保在编译期间元素类型的一致性。泛型类或接口中的类型参数,通常以字母如T(Type)表示。 泛型类的定义语法是...

    Java泛型单链表

    【Java泛型单链表】是一种使用Java编程语言实现的数据结构,主要涉及到链表的创建、插入、删除等基本操作。在Java中,泛型允许我们编写可重用的代码,适用于多种数据类型,而无需进行重复的类型转换。在这个实现中,...

Global site tag (gtag.js) - Google Analytics