【C++】配列の要素を辞書順に並べ替える(辞書順ソート)

条件分岐で配列の要素 s[j] が s[j+1] よりも辞書順が後のときだけ入れ替えるという処理をN-1回繰り返すという方針で実装する。
※ N は配列の要素数

#include <iostream>
#include <string>
using namespace std;

int main() {
  int N;
  cin >> N;
  string s[110];
  for (int i = 0; i < N; ++i) {
    cin >> s[i];
  }

  string tmp;
  for (int i = 0; i < N-1; ++i) {
    for (int j = 0; j < N-1; ++j) {
      if (s[j] > s[j+1]) {
        tmp = s[j];
        s[j] = s[j+1];
        s[j+1] = tmp;
      }
    }
  }
  
  for (int i = 0; i < N; ++i) {
    cout << s[i] << endl;
  }

  return 0;
}

例えば、
        3
        panda
        rabbit
        koala
を入力すると
        koala
        panda
        rabbit
が出力される。
※入力の最初の1回は配列の要素数を入力する。

swap()関数を用いると、次のように書ける。

#include <iostream>
#include <string>
#include <utility>
using namespace std;

int main() {
  int N;
  cin >> N;
  string s[110];
  for (int i = 0; i < N; ++i) {
    cin >> s[i];
  }
  
  for (int i = 0; i < N-1; ++i) {
    for (int j = 0; j < N-1; ++j) {
      if (s[j] > s[j+1]) {
        swap(s[j], s[j+1]);
      }
    }
  }
  
  for (int i = 0; i < N; ++i) {
    cout << s[i] << endl;
  }

  return 0;
}
タイトルとURLをコピーしました