こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ソートプログラムの穴抜き問題がわからない!(明日試験:;)

基数ソートプログラムの一部なんですが穴抜きでわからない部分がありまして・・。
栄小文字の文字列からなる単語データをアルファベット順に習える基数ソートなんですが、英数字が26種類あることから基数は27にしています。

*******;
↑ここの部分がわかりませんで:;

#include <stdio.h>
#define nmax 10000
#define length 5

int ch2int(char ch)
{
(略)// a~zを1~26に変換する。
}

void scopy(char from[], char to[])
{
int i = 0;
while((to[i]=from[i])!='\0'){
i++
}
}

void radix_sort(char a[][length+1], int n)
{
int pos, order[27], i, j;
char buf[nmax+1][length+1];
for(pos=length-1; pos>=0;pos--){
for(j=0;j<27;j++){
order[j]=0;
}
for(i=1;i<=n;i++){
*******;
}
for(j=1;j<27;j++){
*******;
}
for(i=n;i>=1;i--){
scopy(a[i], buf[order[ch2int(a[i][pos])]--]);
}
for(i=1; i<=n;i++){
*******;
}
}
}

int main()
{
int n=0;i,ch;
charword[nmax+1][length+1];
printf("5文字以内で英単語を入力\n");
while(n<nmax){
i=0;
while(i<length && (ch=getchar())!=EOF && ch!='\n' && ch!= ' '){
words[n+1][i++]=ch;
}
if(i>0){
while(i<length){
words[n+1][i++] = ' ';
}
words[n+1][length]='\0';
n++;
}
if(ch==EOF){
break;
}
}

printf("\nソーティング前の入力データ\n");
for(i=1;i<=n;i++){
printf("words[%3d]=%s \n", i, words[i]);
}
radix_sort(words, n);
printf("\nソーティング後のデータ\n");
for(i=1;i<=n;i++){
printf("words[%3d]=%s \n", i, words[i]);
}
}

長文で失礼ですが・・。どなたか教えていただければすっごい光栄です:;

投稿日時 - 2005-07-26 02:38:41

QNo.1538511

すぐに回答ほしいです

質問者が選んだベストアンサー

すでに転記でミスっていませんか?
どう考えても処理できないと思います。

まず、buf に a の内容を転写するのに 最初の **** を使ったら、 order[i] に buf[i][pos] の基数の合計を入れ込むのにもうひとつループが必要で、そのループが三番目の *** だと思うけど、これは位置が
scopy(a[i], buf[order[ch2int(a[i][pos])]--]); より前にこなきゃだめでしょ。よく問題文を見直してみたらどうですか?

投稿日時 - 2005-07-26 03:19:49

補足

そこの部分についての問題文はあっているのでそれでは問題文が違うのですね:;
教えていただいてありがとうございました!

投稿日時 - 2005-07-26 09:15:53

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)