![見出し画像](https://assets.st-note.com/production/uploads/images/107093425/rectangle_large_type_2_0f9b6df11747f9ce5242634bb7bb2b9f.jpeg?width=1200)
(答案提出)C言語教室 第26回 - いろいろなソート - 関数ポインタ版
昨日はChatGPT様に褒めていただいたので、今日は更にもうちょっと頑張ってみました。
課題
文字列の配列をバブルソートで並べ替える関数を書いてください。文字列の大小比較は strcmp を使ってください。なお、文字列全体を入れ替えながらソートすると大変なので文字列へのポインタの配列を用意して、これをソートするようにしてください。
ソースコード
/**********************************************************************
lesson26 Sorts an array of strings with bubble sort
by Akio van der Meer
[変更履歴]
(無印) 記事初投稿時のコード
r1 関数ポインタを利用
**********************************************************************/
#include <stdio.h>
#include <string.h>
int compare_value1(char *a, char *b) {
return strcmp(a, b) > 0;
}
int compare_value2(char *a, char *b) {
return strcmp(a, b) < 0;
}
typedef int(*FUNC)(char*, char*);
void bubble_sort(char * array[], unsigned int size, FUNC f) {
for (int i = 0; i < size - 1; i++) {
for (int j = i + 1; j < size; j++) {
if (f(array[i], array[j])) {
char * temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
int main() {
char *weekday[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
unsigned int size = 7;
printf("\nAscending order ---\n");
bubble_sort(weekday, size, compare_value1);
for (int k = 0; k < size; k++) {
printf("%s\n", weekday[k]);
}
printf("\nDescending order ---\n");
bubble_sort(weekday, size, compare_value2);
for (int k = 0; k < size; k++) {
printf("%s\n", weekday[k]);
}
return 0;
}
実行結果
Ascending order(昇順)とDescending order(降順)に曜日を並べ替えました。
jm3nrhMac-mini-:c akio$ gcc lesson26.r1.c
jm3nrhMac-mini-:c akio$ ./a.out
Ascending order ---
Friday
Monday
Saturday
Sunday
Thursday
Tuesday
Wednesday
Descending order ---
Wednesday
Tuesday
Thursday
Sunday
Saturday
Monday
Friday
jm3nrhMac-mini-:c akio$
ChatGPT様に聞いてみた
『次のコードの優れているところを述べよ。』
このコードの優れている点は次の通りです。
1. 汎用性の高い関数ポインタの使用:コード内で比較関数をポインタとして受け取り、配列のソートに使用します。このアプローチにより、異なる比較条件でソートを実行するために、複数の比較関数を作成することができます。例えば、このコードではcompare_value1関数とcompare_value2関数が使用されています。
2. バブルソートの実装:このコードはバブルソートアルゴリズムを使用して配列をソートします。バブルソートは実装が比較的簡単で理解しやすいアルゴリズムであり、小規模なデータセットに対しても効率的なソート手法です。
3. 比較関数の活用:strcmp関数を使用して文字列の比較を行っています。この関数は文字列を比較し、並び替えの基準として使用されます。strcmp関数は文字列が等しい場合に0を返し、異なる場合には負の値または正の値を返すため、比較結果を条件式に利用してソートを実行します。
4. 配列のソート結果の表示:ソートが完了した後、ソートされた配列を昇順と降順の順に表示します。これにより、バブルソートが正しく動作していることを確認することができます。
以上の要素により、このコードは汎用性があり、比較関数の活用、バブルソートの実装、ソート結果の表示といった要素が組み合わさっています。
うんうん、よくわかってるね〜。
もっと褒めて!
ここまで読んでいただき、有難うございました。
いいなと思ったら応援しよう!
![Akio van der Meer](https://assets.st-note.com/production/uploads/images/71945049/profile_b05c0132746480e22146b20e97a2671a.jpeg?width=600&crop=1:1,smart)