美文网首页STL
范型编程_排序

范型编程_排序

作者: alamu | 来源:发表于2016-05-04 12:04 被阅读34次

title: 范型编程_排序
date: 2016-05-02 12:05:57
categories: 算法 #文章文类
tags: [范型编程,STL,Geekband]


sort

  • 对区域内元素进行从小到大排序
  • 使得 it1 < it2 ,满足(it1) < (it2)
  • 对象必须提供operator<

partial_sort

  • 区域[_First,Mid)元素是从小到大有序排列
  • 区域(Mid,_Last)是未定义的

binary_search

  • 在区域内查找==_Val的元素
  • 容器中的元素首先要排序, 如果不先排序,那么使用binary_search将永远找不到
e.g  
v[] = {1,2,3,10,5} 
baniry_search(v.begin(), v.end(), 5) 
这里将会返回false

merge

  • <font color=red>排好序的</font> 区域1和区域2合并到_Dest中
  • 一定要注意是先排序

基于排序集合的一些算法

  • includes
  • set_union
  • set_intersection
  • set_differrence

includes

  • 判断区域1内是否包含区域2
  • **区域1,区域2都是排好序的
  • 包含则返回true
e.g
v1[]={1,2,3,4,5,6,7}
v2[]={1,4,6}
includes(v1.begin(),v1.end(),v2.begin(),v2.end()) 返回true

v1[]={1,2,3,4,5,6,7}
v2[]={4,9}
includes(v1.begin(),v1.end(),v2.begin(),v2.end()) 返回false

集合算法

set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。

  • 在set中元素都是唯一的。
  • 默认情况下会对元素自动进行升序排列。
  1. 集合的交(set_intersection)
  2. 差(set_difference)
  3. 并(set_union)
  4. 对称差(set_symmetric_difference)

基于堆的算法

  • make_heap
  • push_heap
  • pop_heap
  • sort_heap

make_heap

  • 将区域转换成一个堆
  • 对结构采用max_heap,维持平衡二叉树

v[]={1,4,200,8,100,5,7}
mak_heap(v,v+7)

mak_heap

push_heap

  • 向堆内添加元素
  • 算法假设区域已经是一个堆
  • 堆结构采用max_heap,维持平衡二叉树

e.g
v[]={100,90,99,70,80,30,45,20,35,10,95}

make_heap(v,v+(v.size()-1), v+v.size()) //加入的是最后一个元素'95'

  1. make_heap后


2.实现流程

pop_heap

  • 从堆中弹出根顶元素
  • 算法假设容器已经是个堆
  • 堆结构采用max_heap,维持平衡二叉树

e.g
v[]={100,90,99,70, 25,30,45,20,35,10,95}

make_heap(v,v+(v.size()-1), v+v.size()) //加入的是最后一个元素'95'

  1. make_heap后


  2. pop_heap实现流程

sort_heap

  • 把堆中的元素进行排序
  • 对结构采用max_heap,维持平衡二叉树
  • Sort做法实际就是不断pop_heap

相关文章

  • 范型编程_排序

    title: 范型编程_排序date: 2016-05-02 12:05:57categories: 算法 #文章...

  • python 函数 map 、lambda

    开篇就要提到一个大的话题:编程范型。什么是编程范型?引用维基百科中的解释: 编程范型或编程范式(英语:Progra...

  • 主要的编程范型

    “主要的编程范型”及其语言特性关系 “主要的编程范型”(The principal programming par...

  • 范型编程

    环境:ide:Mac+clion 视频链接:https://www.bilibili.com/video/BV1H...

  • Python科学计算——Functional Programmi

    函数式编程 (Functional Programming) 或者函数程序设计,又称泛函编程,是一种编程范型,它将...

  • 编程范式

    什么是编程范式? 基本概念:编程范型、编程范式或程序设计法(英语:Programming paradigm)。是一...

  • Python快速入门3--函数式编程

    函数式编程(Functional Programming)或者函数程序设计,又称泛函编程,是一种编程范型,它将计算...

  • 范型编程_变易算法

    title: 范型编程_变易算法date: 2016-05-01 11:47:47categories: 算法 #...

  • 编程范型[方法论]

    编程范型、编程范式或程序设计法[Programming paradigm] 定义:决定了程序员对程序执行的看法。 ...

  • 函数式编程简析

    想要知道什么是函数式编程就需要先理解什么是编程范式 编程范式是什么? 编程范型、编程范式或程序设计法(英语:Pro...

网友评论

    本文标题:范型编程_排序

    本文链接:https://www.haomeiwen.com/subject/avmrrttx.html