算法数据结构C++实现4-计数排序(counting sort)
来源:互联网 发布:linux 发送邮件日志 编辑:程序博客网 时间:2024/05/29 10:09
这里是 Introduction to Algorithm 算法导论书中第八章的计数排序 counting sort, 本专题还是以这本书为主,用c++实现其中最重要的算法。
网上也有很多高手研究了这本书,给出了读书摘要;但是先要深入学习这本书的话,还是需要自己去看书的。 本专题的特色就是直接给出程序实现;
这本书的算法还是非常简明易懂的,就是算法分析和一些数学问题会比较难,这些内容还是需要有时间自己慢慢研究的,不过有些比较深入的内容的话,工作中用的会比较少,所以这里主要实现其中的算法。
下面是计数排序 counting sort 的全部代码。
时间效率很高,但是需要额外空间O(n);其实也可以使用等于关键字数个额外空间,节省很多空间的。那个复杂很多,有空我贴上来。
#include<iostream>#include<vector>#include<algorithm>using namespace std;void countingSort(vector<int> &ib, vector<int> &ia, int maxEle){vector<int> ic;//new vector<int>[11]; 这里用new会出现下标溢出的错误!!!int i = 0;ic.resize(maxEle+1,0);//注意这是正确的单个vector分配空间的正确用法!!!for(auto x:ia){ic[x]++;}for(i=1; i<=maxEle; i++){ic[i]=ic[i]+ic[i-1];}for(i=ia.size()-1; i>=0; i--){ib[ic[ia[i]]-1]=ia[i];ic[ia[i]]--;}}void countingSort(vector<int> &ia, int maxEle){vector<int> ib(ia);countingSort(ia,ib,maxEle);}template<typename T>class Print{public:Print(){}void inline operator()(const T& x) const{cout<<x<<" ";}};//这就是函数对象,这里并没有带数据,只是一个简单的输出操作。int main()try{{int a[4]={5,2,9,8}; vector<int> vecI1(a,a+4);vector<int> vecI11(4);int b[7]={2,10,7,10,9,4,5};vector<int> vecI2(b,b+7);vector<int> vecI22(7);countingSort(vecI1,9);countingSort(vecI2,10);for(auto x:vecI1){//C++11标准遍历数组,非常方便cout<<x<<" ";}cout<<endl;for_each(vecI2.begin(), vecI2.end(), Print<int>());cout<<endl;//这里利用stl中的函数实现输出return 0;}}catch(out_of_range){cerr<<"range error\n";}catch(...){cerr<<"unknow exception thrown\n";}
重点还是要注意下标的问题,和vector的用法,vector分配内存问题。算法并不难实现。
- 算法数据结构C++实现4-计数排序(counting sort)
- Counting sort-计数排序算法之Java实现
- 经典排序算法 - 计数排序Counting sort
- 计数排序的PHP实现 Counting sort
- 计数排序(Counting-Sort)
- 计数排序:counting-sort
- 计数排序(Counting Sort)
- 计数排序 Counting Sort
- Counting sort 计数排序
- 计数排序Counting sort
- 计数排序Counting sort
- 计数排序Counting sort
- 计数排序-Counting sort
- 计数排序-Counting Sort
- 排序算法系列:计数排序(Counting sort)(C语言)
- 排序算法总结之计数排序 Counting Sort
- java计数排序(counting sort)
- 计数排序 (Counting Sort)
- Android 调试技术
- jsvm代码理解
- 【AngelaBaby杨颖性感公主XP主题】
- 深入Java虚拟机读书笔记(5)
- SHGetFileInfo函数 获取系统文件类型及图标
- 算法数据结构C++实现4-计数排序(counting sort)
- unxi/linux视频地址
- JSVM介绍
- Selenium私房菜系列1 -- Selenium简介
- implementation of General Sort Algorithm - mark
- Android WebView的前进、后退、与刷新
- 中文字号VS英文字号(磅)VS像素值的对应关系
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- Android Camera Preview ANativeWindow的处理