【C++】配列の要素を小さい順に並べ替える(昇順ソート)

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

#include <iostream>
using namespace std;

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

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

  for (int i = 0; i < N; ++i) {
    cout << a[i] << ' ';
  }
  cout << endl;

  return 0;
}

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

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

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

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

  for (int i = 0; i < N-1; ++i) {
    for (int j = 0; j < N-1; ++j) {
      if (a[j] > a[j+1]) {
        swap(a[j], a[j+1]);
      }
    }
  }

  for (int i = 0; i < N; ++i) {
    cout << a[i] << ' ';
  }
  cout << endl;

  return 0;
}

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

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

int main() {
  int N;
  cin >> N;
  int a[N];
  for (int i = 0; i < N; ++i) {
    cin >> a[i];
  }
  
  sort(a,a+N);
  
  for (int i = 0; i < N; ++i) {
    cout << a[i] << ' ';
  }
  cout << endl;
  
  return 0;
}

タイトルとURLをコピーしました