
(答案提出)C言語教室 第26回 - いろいろなソート
最近しばらく、課題が難しすぎて、解答を見ながらウンウン唸ってました。
今回のはなんとか対応できそうです。
課題
文字列の配列をバブルソートで並べ替える関数を書いてください。文字列の大小比較は strcmp を使ってください。なお、文字列全体を入れ替えながらソートすると大変なので文字列へのポインタの配列を用意して、これをソートするようにしてください。
ソースコード
英語表記の曜日を、文字列でソートして並べ替えます。
/**********************************************************************
lesson26 Sorts an array of strings with bubble sort
by Akio van der Meer
[変更履歴]
(無印) 記事初投稿時のコード
**********************************************************************/
#include <stdio.h>
#include <string.h>
int main() {
char *weekday[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
char *temp = "";
int size = 7;
for (int i = 0; i < size - 1; i++) {
for ( int j = i + 1; j < size; j++) {
if (strcmp(weekday[i], weekday[j]) > 0) {
temp = weekday[i];
weekday[i] = weekday[j];
weekday[j] = temp;
}
}
}
for (int k = 0; k < size; k++) {
printf("%s\n",weekday[k]);
}
return 0;
}
実行結果
この並びに違和感を禁じ得ませんが、確かにアルファベット順に並んでいます。
jm3nrhMac-mini-:c akio$ gcc lesson26.c
jm3nrhMac-mini-:c akio$ ./a.out
Friday
Monday
Saturday
Sunday
Thursday
Tuesday
Wednesday
jm3nrhMac-mini-:c akio$
如何でしょうか?機能しているみたいです。
ChatGPT様に聞いてみた
『次のコードの優れているところを述べよ。』
このコードの優れている点は、次のとおりです。
1. 文字列のソート: コードは、weekday配列内の文字列を辞書順にソートしています。文字列の比較にはstrcmp関数を使用しており、ソートアルゴリズムとしてバブルソートを実装しています。ソートアルゴリズムを使用することで、データを特定の順序で整理できます。
2. 柔軟なデータ構造: weekday配列は、ポインタの配列として宣言されています。これにより、要素を簡単に追加、削除、または交換することができます。また、ポインタを使用することで、文字列の長さに制約されずに異なる長さの文字列を格納できます。
3. 再利用可能なコード: ソートアルゴリズムは、関数内にカプセル化されています。このため、同じソート処理を他の場所で再利用することができます。また、新しい文字列の配列をソートする場合でも、同じソート関数を使用することができます。
4. 出力の整形: ソートされた文字列は、ループを使用して順番に出力されます。出力はprintf関数を使用して行われ、各文字列は改行文字で区切られます。これにより、ソート結果が読みやすくなります。
以上の点がこのコードの優れた特徴です。
うっしっし、、!
後記
「いやぁ参った、またポインタだよ、、、しかも配列、、、」
、、、まだまだポインタ恐怖症の克服は時間がかかりそうです(苦笑
関数ポインタは、、、スルーさせていただきました。ごめんなさい。
ここまで読んでいただき、有難うございました。
いいなと思ったら応援しよう!
