//按照字典排序10个5字母的单词—— |
//基数排序——自右向左依次执行最稳定的排序算法 |
#include "iostream" |
#include "string" |
using namespace std; |
#define n 5 //每个单词的数目是5 |
#define count 10 //输入10个单词 |
int main() |
{ |
int i=0,j=0,k=0,d=0,m=0; //k:当前字母在26字母中的位置 |
//存放单词 |
string c[count]={ "apple" , "fears" , "bvdsa" , "bgisy" , |
"trfbh" , "kansh" , "nvfbs" , "rtbvr" , "wrcas" , "ngfba" }; |
string str[26][count]; //用来存放基数排序的桶 |
for (j=4;j>=0;j--) //根据基数排序法,对单词各位(0—n-1)进行排序,从右到作,j=4 |
{ |
for (i=0;i<count;i++) //对count个单词进行J位进排序桶 |
{ |
k=c[i][j]-97; //存放的位置 |
str[k][m++]=c[i]; //第k行第m列 |
} |
for (i=0,k=0;i<count&&k<26;k++){ //按顺序回收排序桶 |
for (d=0;d<count;d++){ |
//第k行第d列的第j个字母 |
if (str[k][d][j]>96&&str[k][d][j]<123||str[k][d][j]>64&&str[k][d][j]<91) |
//判断26个排序桶是否有单词 |
//ASCII码:A--65;Z--90;a--97;z--122 |
{ |
c[i]=str[k][d]; //将第K行第d列的元素赋值给c[i] |
i++; |
str[k][d]=-1; //标记为已找过 |
} |
m=0; |
} |
} |
} |
for (i=0;i<count;i++) //输出结果 |
{ |
|
cout<<c[i]<<endl; |
} |
return 0; |
} |
by: 发表于:2017-12-13 10:31:43 顶(0) | 踩(0) 回复
??
回复评论