.cpp
#include "binSort.h" #define BUFFSIZE 100 int main() { list<card> theCard; int n,deck,suit,face; cout<<"please input the number of group\n"; cin>>n; cout<<"then input the card\n"; for(int i = 0;i != n;++i){ cin>>deck>>suit>>face; theCard.push_front(card(deck,suit,face)); } cout<<"********************\n"; for(auto it = theCard.begin(); it != theCard.end();it++){ std::cout<<" "<<(*it).element[0]<<" "<<(*it).element[1]<<" "<<(*it).element[2]; cout<<"\n"; } for(int i = 0 ; i != 3; ++i) binSort(theCard,n,2-i); cout<<"********************\n"; for(auto it = theCard.begin(); it != theCard.end();it++){ std::cout<<" "<<(*it).element[0]<<" "<<(*it).element[1]<<" "<<(*it).element[2]; cout<<"\n"; } return 0; }这个卡片的排序的思想其实就是多次桶排序(箱子排序)。可以这样理解,这里用deck,suit,face分别表示组号,样式以及面值。然后其实就是根据这三个值对输入的卡片进行排序。其实可以把这三个数表示为一个整数的三个不同的部位。deck表示的是百位,suit表示的是十位,face表示的是个位数。所以我们可以按照这个顺序进行三次桶排序。第一次根据个位数(deck)排序,第二次根据十位数(suit)排序,第三次根据百位数(deck)进行排序。 总结:其实无论卡片有多少个域(n个域),然后只需要进行n次桶排序就好了。