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() を組み合わせるだけで、文字列の配列でも手軽にソート処理を実装できます。ぜひ自分の環境で動かして、挙動を確認してみてください。
-
Pythonでカウントソートを実装する方法|サンプルコード付きで解説
この記事では、以下の問題文に対する解決策について詳しく解説します。 問題文 問題: 配列が与えられたとき、カウントソート(Counting Sort)のアルゴリズムを用いて、その配列を昇順に並べ替えます。 カウントソートとは? カウントソートは、あらかじめ決められた範囲内のキーを対象として動作する整列アルゴリズムです。まず、それぞれ異なるキー(値)を持つ要素がいくつあるかを数え上げます。その後、累積和の計算を行うことで、各要素がソート後の配列のどの位置に配置されるべきかを求め、結果を出力します。 この手法は、キーの取り得る範囲が狭い場合に特に有効で、時間計算量は O(n + k)(n は要素数
-
Pythonで挿入ソート(Insertion Sort)を実装する方法:アルゴリズムとサンプルコードを徹底解説
この記事では、Python 3.x(およびそれ以前のバージョン)における挿入ソートの実装方法について詳しく解説します。挿入ソートは、トランプの手札を整理するイメージに近い、直感的で理解しやすいソートアルゴリズムです。挿入ソートのアルゴリズム挿入ソートは以下の手順で動作します。入力要素を順番に走査し、各反復ごとにソート済みの配列部分を少しずつ拡張していきます。現在注目している要素(キー)を、ソート済み部分の中で最も大きい値と比較します。キーがその値より大きければ、要素は元の位置のまま次の要素へ進みます。そうでなければ、ソート済み配列内の正しい位置を探し出し、そこへ移動させます。具体的には、ソート