【C++实现序列的划分】

简介:

C++实现类型不限的序列的划分算法

代码:
/**
* project: partition template
* author:billhoo
* date: 2012年3月10日
*/
#pragma once
#ifndef _PARTITION_H
#define _PARTITION_H

template<class Iterator, class Comp>
Iterator partition(Iterator beg, Iterator end){
  //为避免部分编译器对迭代器的限制,本算法从后往前遍历
  //以首元素作为分界值,当然,我们还可以取随机下标作为
  //分界值以获得平均算法时间
  using std::swap;
  typedef typename std::iterator_traits<Iterator>::value_type val_t;
  Iterator left = end;
  Iterator right = end;
  val_t key = *beg;
  for(--left; left != beg; --left)
    if(Comp()(*left, key))
      swap(*left, *--right);
  swap(*beg, *--right);
  return right;
}// end of partition

#endif
复制内容到剪贴板
代码:
/**
* author:billhoo
* date: 2012年3月10日
*/
#include<iostream>
#include<list>

#include"partition.h"  //partition
#include"display_array.h"  //displayArr

using std::cout;
using std::endl;
using std::list;

int main(int argc, char **argv){
  int intArr[ ] = {0,2,-48,3,4,-78,5,6,7,8,-5};
  int *intArrEnd = intArr + sizeof(intArr) / sizeof(*intArr);
  
  list<int> intList(intArr, intArrEnd);

  displayArr<int*>(intArr, intArrEnd);
  partition<int*, std::greater<int>>(intArr, intArrEnd);
  displayArr<int*>(intArr, intArrEnd);

  displayArr(intList.begin(), intList.end());
  partition<list<int>::iterator, std::greater<int>>(intList.begin(), intList.end());
  displayArr(intList.begin(), intList.end());

  return EXIT_SUCCESS;
}                          本文转自Bill_Hoo 51CTO博客,原文链接:http://blog.51cto.com/billhoo/802141,如需转载请自行联系原作者
相关文章
|
11月前
|
存储 数据采集 数据处理
Baumer工业相机堡盟工业相机如何通过BGAPISDK设置相机的Bufferlist序列(C++)
Baumer工业相机堡盟工业相机如何通过BGAPISDK设置相机的Bufferlist序列(C++)
78 0
|
8月前
|
传感器 定位技术 C++
基于C++的GDAL用空白栅格填充长时间序列遥感影像中的缺失图像
然后,定义需要处理的遥感影像路径列表,和识别数据缺失的逻辑。这里我们简化处理,假设已经知道哪一幅图像是缺失的,因此直接跳过识别步骤。
113 1
|
11月前
|
编解码 算法 程序员
【C++ 泛型编程 高级篇】 C++ 14 模版元编程 遍历元组 编译期生成整数序列 std::index_sequence和std::make_index_sequence 使用指南(三)
【C++ 泛型编程 高级篇】 C++ 14 模版元编程 遍历元组 编译期生成整数序列 std::index_sequence和std::make_index_sequence 使用指南
141 0
|
11月前
|
C++ 索引
【C++ 泛型编程 高级篇】 C++ 14 模版元编程 遍历元组 编译期生成整数序列 std::index_sequence和std::make_index_sequence 使用指南(二)
【C++ 泛型编程 高级篇】 C++ 14 模版元编程 遍历元组 编译期生成整数序列 std::index_sequence和std::make_index_sequence 使用指南
211 0
|
11月前
|
存储 编译器 程序员
【C++ 泛型编程 高级篇】 C++ 14 模版元编程 遍历元组 编译期生成整数序列 std::index_sequence和std::make_index_sequence 使用指南(一)
【C++ 泛型编程 高级篇】 C++ 14 模版元编程 遍历元组 编译期生成整数序列 std::index_sequence和std::make_index_sequence 使用指南
478 0
|
11月前
|
Java Go 人工智能
Java每日一练(20230502) BST公共祖先、随机分组、K个一组翻转链表
Java每日一练(20230502) BST公共祖先、随机分组、K个一组翻转链表
91 0
Java每日一练(20230502) BST公共祖先、随机分组、K个一组翻转链表
|
11月前
|
Go C++ Java
C/C++每日一练(20230411) 排列序列、翻转字符串里的单词、能被13又能被20整除的四位正整数的和
C/C++每日一练(20230411) 排列序列、翻转字符串里的单词、能被13又能被20整除的四位正整数的和
82 0
C/C++每日一练(20230411) 排列序列、翻转字符串里的单词、能被13又能被20整除的四位正整数的和
|
11月前
|
算法 测试技术 C++
【动态规划】【C++算法】801. 使序列递增的最小交换次数
【动态规划】【C++算法】801. 使序列递增的最小交换次数
|
11月前
|
算法 C++
C++哈希表企业级运用----DNA序列的检测
C++哈希表企业级运用----DNA序列的检测
|
11月前
|
存储 算法 C++
括号序列:使用C++检查括号有效性
括号序列:使用C++检查括号有效性
208 0