Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で名前・文字列の配列をソートする方法|qsort()とstrcmp()の使い方


この記事では、文字列(名前)の配列を受け取り、それをアルファベット順(昇順)に並べ替えるC言語プログラムを作成します。入力として与えられたすべての名前を、辞書順にソートするのが目的です。

まずは具体例で問題を確認しましょう。

入力

namesArray = ["Rishabh", "Jyoti", "Palak", "Akash"]

出力

["Akash", "Jyoti", "Palak", "Rishabh"]

解決のアプローチ

この問題は、C言語の標準ライブラリに用意されている汎用ソート関数 qsort() を使うことで解決できます。整数値の配列をソートする場合と基本的な考え方は同じですが、今回異なるのは、比較対象が整数ではなく文字列であるという点です。

そのため、qsort() の第4引数に渡すコンパレータ(比較関数)を文字列用に変更し、strcmp() を使って文字列同士を比較します。strcmp() は2つの文字列を辞書順に比較し、第1引数が大きければ正の値、等しければ0、小さければ負の値を返す関数です。この仕組みを利用することで、名前や文字列の配列を簡単にソートできます。

名前・文字列の配列をソートするCプログラム

サンプルコード

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int comparator(const void* str1, const void* str2) {
    if(strcmp(*(const char**)str1, *(const char**)str2) >= 0)
        return 1;
    else return 0;
}

int main() {
    const char* arr[] = {"Rishabh", "Jyoti", "Palak", "Akash"};
    int n = sizeof(arr) / sizeof(arr[0]);

    printf("\nGiven array of names: \t");
    for (int i = 0; i < n; i++) printf("%s \t", arr[i]);

    qsort(arr, n, sizeof(const char*), comparator);

    printf("\nSorted array of names: \t");
    for (int i = 0; i < n; i++)
        printf("%s \t", arr[i]);

    return 0;
}

実行結果

Given array of names:  Rishabh   Jyoti   Palak   Akash
Sorted array of names: Akash     Jyoti   Palak   Rishabh

コードのポイント

  • comparator関数: const void* 型で受け取った2つの要素を const char** にキャストし、strcmp() で文字列として比較しています。
  • qsort()の引数: ソート対象の配列、要素数、1要素あたりのサイズ(sizeof(const char*))、そして比較関数へのポインタを渡します。
  • 要素数の計算: sizeof(arr) / sizeof(arr[0]) により、配列全体のサイズを1要素のサイズで割ることで要素数を求めています。

このように、qsort()strcmp() を組み合わせるだけで、文字列の配列でも手軽にソート処理を実装できます。ぜひ自分の環境で動かして、挙動を確認してみてください。

  1. Pythonでカウントソートを実装する方法|サンプルコード付きで解説

    この記事では、以下の問題文に対する解決策について詳しく解説します。 問題文 問題: 配列が与えられたとき、カウントソート(Counting Sort)のアルゴリズムを用いて、その配列を昇順に並べ替えます。 カウントソートとは? カウントソートは、あらかじめ決められた範囲内のキーを対象として動作する整列アルゴリズムです。まず、それぞれ異なるキー(値)を持つ要素がいくつあるかを数え上げます。その後、累積和の計算を行うことで、各要素がソート後の配列のどの位置に配置されるべきかを求め、結果を出力します。 この手法は、キーの取り得る範囲が狭い場合に特に有効で、時間計算量は O(n + k)(n は要素数

  2. Pythonで挿入ソート(Insertion Sort)を実装する方法:アルゴリズムとサンプルコードを徹底解説

    この記事では、Python 3.x(およびそれ以前のバージョン)における挿入ソートの実装方法について詳しく解説します。挿入ソートは、トランプの手札を整理するイメージに近い、直感的で理解しやすいソートアルゴリズムです。挿入ソートのアルゴリズム挿入ソートは以下の手順で動作します。入力要素を順番に走査し、各反復ごとにソート済みの配列部分を少しずつ拡張していきます。現在注目している要素(キー)を、ソート済み部分の中で最も大きい値と比較します。キーがその値より大きければ、要素は元の位置のまま次の要素へ進みます。そうでなければ、ソート済み配列内の正しい位置を探し出し、そこへ移動させます。具体的には、ソート