计数排序

来源:互联网 发布:软件到期时间破解 编辑:程序博客网 时间:2024/06/05 14:51

1、主要思想:

      借助一个中间数组data_b来保存data数组中任意小于或等于data[i]元素的个数,以此来定位data[i]在数组中的位置(按大小排序的第几位)。该过程中不存在任意两个数之间的比较。

2、代码:

//计数排序#include <iostream>#include <vector>using namespace std;void count_sort(vector<float> data,int k);int main(){//接收排序数据vector<float> sort_data;float data;while ((cin>>data)&&(data!='a')){sort_data.push_back(data);}//显示需要排序的数据cout<<"The set of data show as:"<<endl;for (int i=0;i<sort_data.size();i++){cout<<sort_data[i]<<"\t";}cout<<endl;//对数据进行排序,从小到大cin.clear();//重置错误输入cin.sync();//清空缓冲区  cout<<"input the max number:";int max_k;cin>>max_k;//显示排序完的数据cout<<"The set of data after sorting show as:"<<endl;count_sort(sort_data,max_k);system("pause");return 0;}void count_sort(vector<float> data,int k){vector<float> data_b;//记录小于i的元素的个数 for(int i=0;i<=k;i++)data_b.push_back(0);vector<float> data_c;//保存最终的排序结果for(int i=0;i<data.size();i++)data_c.push_back(0);//统计等于i的元素的个数for(int i=0;i<data.size();i++){data_b[data[i]]++;}//统计小于或等于i的元素的个数for(int i=1;i<=k;i++){data_b[i]+=data_b[i-1];}//依据data_b的值来排序for(int i=data.size()-1;i>=0;i--)//保证稳定排序{data_c[data_b[data[i]]-1]=data[i];data_b[data[i]]--;}/*for(int i=0;i<data.size();i++)//保证稳定排序{data_c[data_b[data[i]]-1]=data[i];data_b[data[i]]--;}*/for (int i=0;i<data_c.size();i++){cout<<data_c[i]<<"\t";}cout<<endl;}

3、时间复杂度:O(n) 。

 

原创粉丝点击