源码系列:计数排序、基数排序、桶排序
2014-12-19 20:06
447 查看
linear_sort.cpp
测试程序:
测试结果:
#include <iostream> #include <algorithm> #include <vector> #include <iterator> #include <cmath> using namespace std; namespace algo { /// 计数排序 void CountingSort(vector<int> &ivec,int maxsize,int n) { for(int i=0;i<n;i++) { ivec.push_back(rand() % maxsize); } cout << "计数排序前序列:" << endl; copy(ivec.begin(),ivec.end(),ostream_iterator<int>(cout,"\t")); cout << endl; vector<int> cvec(maxsize,0); for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();iter++) { cvec[*iter]++; } ivec.clear(); for(int i=0;i<maxsize;i++) { for(int j=0;j<cvec[i];j++) { ivec.push_back(i); } } cout << "计数排序后序列:" << endl; copy(ivec.begin(),ivec.end(),ostream_iterator<int>(cout,"\t")); } /// 基数排序 int GetDigitNum(int number,int d) { for(int i=1;i<d;i++) { number /= 10; } return number % 10; } void RadixSort(int dim) { vector<int> ivec; int temp = dim; for(int i=0;i<10;i++) { ivec.push_back(rand() % (int)pow(10.0,dim)); } cout << "基数排序前序列:" << endl; copy(ivec.begin(),ivec.end(),ostream_iterator<int>(cout,"\t")); cout << endl; for(int i=1;i<=dim;i++) { stable_sort(ivec.begin(),ivec.end(),[&](int left,int right) -> bool { return GetDigitNum(left,i) < GetDigitNum(right,i); }); } cout << "基数排序后序列:" << endl; copy(ivec.begin(),ivec.end(),ostream_iterator<int>(cout,"\t")); cout << endl; } void BucketSort() { vector<double> v; for(int i=0;i<10;i++) { v.push_back((rand() % 100) * 1.0 / 100.0); } cout << "桶排序前的序列:" << endl; copy(v.begin(),v.end(),ostream_iterator<double>(cout,"\t")); cout << endl; vector< vector<double> > bucket(10); for_each(v.begin(),v.end(),[&](double d) { bucket[d * 10].push_back(d); }); for_each(bucket.begin(),bucket.end(),[](vector<double> &sub_v) { sort(sub_v.begin(),sub_v.end()); }); v.clear(); for_each(bucket.begin(),bucket.end(),[&](vector<double> &sub_v) { v.insert(v.end(),sub_v.begin(),sub_v.end()); }); cout << "桶排序后序列:" << endl; copy(v.begin(),v.end(),ostream_iterator<double>(cout,"\t")); } }
测试程序:
#include <iostream> #include <vector> #include "linear_sort.cpp" using namespace std; int main() { vector<int> ivec; algo::CountingSort(ivec,100,100); cout << endl; algo::RadixSort(5); cout << endl; algo::BucketSort(); cout << endl; return 0; }
测试结果:
相关文章推荐
- 线性时间排序——计数排序,基数排序,桶排序
- 数据结构与算法——线性时间排序(计数排序、基数排序、桶排序)
- 线性时间排序C++代码集合(计数排序,基数排序,桶排序([0~1)的浮点数))
- 线性排序----计数排序, 基数排序, 桶排序
- 五 线性时间排序(基数排序、计数排序和桶排序)
- 【数据结构与算法】内部排序之五:计数排序、基数排序和桶排序(含完整源码)
- 各种线性排序记录(计数排序,基数排序,桶排序) 及 希尔排序
- 算法导论之排序:快速排序、归并排序、计数排序、基数排序、桶排序
- 基数排序 计数排序 桶排序
- 三种线性排序算法 计数排序、桶排序与基数排序
- 三种基于“分配”“收集”的线性排序算法---计数排序、桶排序与基数排序
- 【算法导论】第8章线性时间排序_计数排序、基数排序、桶排序
- 【更新】排序算法比较:插入排序,冒泡排序,归并排序,堆排序,快速排序,计数排序,基数排序,桶排序
- 三种线性排序算法: 计数排序、桶排序与基数排序
- 数据结构 28 排序 计数排序 基数排序 桶排序
- 《算法导论》学习总结 — 8.第八章(2) 计数排序 && 基数排序 && 桶排序
- 计数排序,基数排序,桶排序
- 计数排序、基数排序、桶排序
- 三种线性排序算法 计数排序、桶排序与基数排序
- 基数排序、桶排序、计数排序