見出し画像

(答案提出)C言語教室 第26回 - いろいろなソート

最近しばらく、課題が難しすぎて、解答を見ながらウンウン唸ってました。
今回のはなんとか対応できそうです。

課題

文字列の配列をバブルソートで並べ替える関数を書いてください。文字列の大小比較は strcmp を使ってください。なお、文字列全体を入れ替えながらソートすると大変なので文字列へのポインタの配列を用意して、これをソートするようにしてください。

https://note.com/kazushinakamura/n/nfd3c397f30a1


ソースコード

英語表記の曜日を、文字列でソートして並べ替えます。

/**********************************************************************
	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関数を使用して行われ、各文字列は改行文字で区切られます。これにより、ソート結果が読みやすくなります。

以上の点がこのコードの優れた特徴です。

https://chat.openai.com/

うっしっし、、!


後記

「いやぁ参った、またポインタだよ、、、しかも配列、、、」


、、、まだまだポインタ恐怖症の克服は時間がかかりそうです(苦笑

関数ポインタは、、、スルーさせていただきました。ごめんなさい。


ここまで読んでいただき、有難うございました。

この記事が参加している募集

#AIとやってみた

27,969件

これまでの収益は全て、それを必要としておられる方々へ、支援機関を通して寄付させていただきました。この活動は今後も継続したいと思っています。引き続きよろしくお願いいたします。