基数排序

来源:互联网 发布:备案域名注册 编辑:程序博客网 时间:2024/05/20 05:07
// sort.cpp : Defines the entry point for the console application.///*基数排序: 对其每一位数进行箱排序digits*(len+range)*/#include "stdafx.h"#include <iostream>#include<list>#include<math.h>#include<string>using namespace std;class Node{public:void binsort(list<Node> &initialstatus, int range,int digit );void RadixSort( list<Node> & initialstatus, int range,int digits);void inptstatus(list<Node>&initialstatus,int &digits );void output(list<Node> initialstatus);private:int score;string name;};void Node::output(list<Node> initialstatus){list<Node>::iterator pos;for(pos=initialstatus.begin();pos!=initialstatus.end();++pos)cout<<(*pos).name<<" "<<(*pos).score<<endl;}void Node::inptstatus(list<Node>&initialstatus,int &digits){Node x;cout<<"请输入有几位数:"<<endl;cin>>digits;for(int i=0;i<3;i++){cin>>x.name>>x.score;initialstatus.push_back(x);}}void Node::RadixSort(list<Node> &initialstatus, int range,int digits)//基数排序函数{//list<Node>::iterator pos;for(int i=1;i<=digits;++i)                                                 {binsort(initialstatus,range,i);}}void Node::binsort(list<Node> & initialstatus,int range,int digit)//箱排序函数{int len=initialstatus.size();    Node x;list<Node> *bin;bin=new list<Node>[range];int j;  for(int i=1;i<=len;++i){x=initialstatus.front();initialstatus.pop_front();j=(x.score)%(int)pow((double)range,digit)/(int)pow((double)range,(digit-1));//取每位数bin[j].push_front(x);}for(int m=range-1;m>=0;--m){while(!bin[m].empty()){x=bin[m].front();bin[m].pop_front();initialstatus.push_front(x);}}//for(int i=0;i<range;i++)delete  [] bin;}  void main(){list<Node> initialstatus;int range=10;int digits=1;Node x;x.inptstatus(initialstatus,digits);x.RadixSort(initialstatus,range,digits);x.output(initialstatus);}

原创粉丝点击