算法导论 第8章 线性时间排序 C++实现

来源:互联网 发布:js input 回车事件 编辑:程序博客网 时间:2024/06/04 23:32

chapter8.h

#ifndef CHAPTER8_H#define CHAPTER8_H//CLRS chapter 8- sorting in linear time//by full_speed_turbo// 20140521#include<iostream>#include<vector>#include<list>void counting_sort(std::vector<int>& a,   std::vector<int>& b,int k){std::vector<int> c(k+1,0);for(int j=0;j<a.size();j++){c[a[j]]++;}for(int i=1;i<=k;i++){c[i]+=c[i-1];}for(int j=a.size()-1;j>=0;j--){b[c[a[j]]-1]=a[j];c[a[j]]--;}}//8.3 radix sort//insertion sort for radix sortvoid insertion_sort_radix(std::vector<int>& a,std::vector<int>& b){for(int j=1;j<a.size();j++){int keya=a[j];int keyb=b[j];int i=j-1;while(i>=0&&b[i]>keyb){a[i+1]=a[i];b[i+1]=b[i];i--;}a[i+1]=keya;b[i+1]=keyb;}}//redix sortvoid radix_sort(std::vector<int>& a,int d){for(int i=0;i<d;i++){std::vector<int> b(a.size(),0);for(int j=0;j<a.size();j++)//b[j]=(a[j]/10^i)%10;//priority problemb[j]=a[j]/10^i%10;insertion_sort_radix(a,b);}}//8.4 bucket sortvoid bucket_sort(std::vector<double>& a){std::vector< std::list<double> > b(a.size(),std::list<double>());for(int i=0;i<a.size();i++)b[(int)(a.size()*a[i])].push_back(a[i]);for(int i=0;i<b.size();i++)if(b[i].size()>1)b[i].sort();int k=0;for(int i=0;i<b.size();i++)if(b[i].empty()==false)for(std::list<double>::iterator itr=b[i].begin();itr!=b[i].end();itr++,k++)a[k]=*itr;}template<class T>void display_vector(std::vector<T>& a){for(int i=0;i<a.size();i++)std::cout<<a[i]<<" ";std::cout<<std::endl;}#endif

chapter8_test.cpp

#include"chapter8.h"void main(){//int arr[]={2,5,3,0,2,3,0,3};//std::vector<int> a(arr,arr+8);//std::vector<int> b(8,0);//counting_sort(a,b,5);//display_vector(b);//int arr[]={329,457,657,839,436,720,355};//std::vector<int> a(arr,arr+7);//radix_sort(a,3);//display_vector(a);double array_bucket[]={0.78,0.17,0.39,0.26,0.72,0.94,0.21,0.12,0.23,0.68};std::vector<double> a(array_bucket,array_bucket+10);bucket_sort(a);display_vector(a);}


0 0
原创粉丝点击