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

文字列を英数字順(辞書順)に並べ替えるアルゴリズムとC++実装例


与えられた文字列のリストを、英数字順(辞書順)に並べ替えるアルゴリズムを解説します。例えば「Apple」「Book」「Aim」という3つの単語がある場合、これらは「Aim」「Apple」「Book」の順に並べ替えられます。また、リストに数値が含まれている場合は、文字コードの順序に従って、英字の文字列よりも前に配置されます。

入力と出力

Input:
文字列のリスト: Ball Apple Data Area 517 April Man 506
Output:
ソート後の文字列: 506 517 Apple April Area Ball Data Man

アルゴリズム

ここでは、隣り合う要素同士を比較して必要に応じて入れ替える「バブルソート」の仕組みを利用します。大まかな流れは以下のとおりです。

sortStr(strArr, n)

入力: ソート対象のすべての文字列のリスト、および要素数

出力: 英数字順に並べ替えられた文字列

Begin
    for round := 1 to n-1, do
      for i := 0 to n-round, do
         res := compare str[i] and str[i+1]     //正・負・0 のいずれかを返す
         if res > 0, then
            swap str[i] and str[i+1]            //2つの文字列を入れ替える
      done
   done
End

文字列の比較には compare() 関数を使用します。この関数は2つの文字列を辞書順で比較し、前の文字列の方が大きければ正の値、小さければ負の値、等しければ 0 を返します。比較結果が正の値となったときだけ隣接する2つの文字列を入れ替えていくことで、リスト全体が昇順に整列していきます。

C++による実装例

#include<iostream>
#define N 8
using namespace std;

void display(int n, string str[]) {
    for(int i = 0; i<n; i++)
        cout << str[i] << " ";          //配列内の文字列を表示
    cout << endl;
}

void sortStr(int n, string str[]) {
    int i, round, res;
    for(round = 1; round<n; round++)
        for(i = 0; i<n-round; i++) {
            res = str[i].compare(str[i+1]);
            if(res > 0)
                swap(str[i], str[i+1]); //文字列を入れ替える
        }
}

main() {
    string str[N] = {"Ball", "Apple", "Data", "Area", "517", "April", "Man", "506"};
    cout << "Strings before sort:" << endl;
    display(N, str);
    sortStr(N, str);
    cout << "Strings after sort:" << endl;
    display(N, str);
}

実行結果

Strings before sort:
Ball Apple Data Area 517 April Man 506
Strings after sort:
506 517 Apple April Area Ball Data Man

実行結果を見ると、数値の「506」と「517」が先頭に来て、その後ろに英字の文字列が「Apple」「April」「Area」「Ball」「Data」「Man」の順に並んでいることが確認できます。これは、ASCIIコードでは数字('0'〜'9')が英大文字('A'以降)よりも小さい値を持つためです。したがって、数値文字列は常に英字の文字列より前方に配置されます。

  1. 【Android】RecyclerViewで文字列リストをソート表示する方法を実例付きで解説

    はじめに:RecyclerViewとはRecyclerViewのソート機能について解説する前に、まずAndroidにおける「RecyclerView」が何なのかを簡単に確認しておきましょう。RecyclerViewは、従来のListViewをより高度に進化させたUIコンポーネントです。ViewHolderデザインパターンに基づいて動作し、大量のアイテムを効率的に描画できる点が最大の特徴です。グリッド形式でもリスト形式でもアイテムを柔軟に表示できます。本記事では、学生の氏名と年齢を一覧表示するシンプルな学籍管理アプリを題材に、RecyclerViewのアイテムを文字列(氏名)順に並べ替える方法を

  2. MySQLで英数字文字列から数字のみを基準に並べ替える方法

    MySQLで英数字文字列から数字のみを基準に並べ替える方法「Adam_101」や「121John_567」のような英数字が混在した文字列から、数字の部分だけを基準にレコードを並べ替えたいケースはよくあります。MySQLでは、ORDER BY句とRIGHT()関数を組み合わせることで、このような並べ替えを簡単に実現できます。RIGHT()関数は、文字列の右端から指定した文字数を抽出する関数です。例えば「RIGHT(StudentCode, 3)」と記述すると、StudentCode列の値の末尾3文字が取得されます。これを並べ替えのキーとして指定することで、文字列中の数字部分を基準にソートが可能に