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

C++のSTLを使って配列をソートする方法をわかりやすく解説

この記事では、C++のSTL(標準テンプレートライブラリ)関数を使って配列をソートする方法を解説します。例えば、配列が A = [52, 14, 85, 63, 99, 54, 21] の場合、ソート後の出力は [14 21 52 54 63 85 99] となります。

配列のソートには、<algorithm> ヘッダーに用意されている sort() 関数を使用します。この関数は、ソート対象の範囲の先頭イテレータと末尾イテレータ(またはポインタ)を引数として受け取ります。通常の配列の場合は、sort(arr, arr + n) のように指定します。

サンプルコード

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
   int arr[] = {52, 14, 85, 63, 99, 54, 21};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Array before sorting: ";
   for (int i = 0; i < n; i++)
      cout << arr[i] << " ";
   sort(arr, arr + n);
   cout << "\nArray after sorting: ";
   for (int i = 0; i < n; i++)
      cout << arr[i] << " ";
}

実行結果

Array before sorting: 52 14 85 63 99 54 21
Array after sorting: 14 21 52 54 63 85 99

コードのポイント

  • 要素数の取得: sizeof(arr) / sizeof(arr[0]) により、配列全体のサイズを1要素のサイズで割ることで要素数 n を求めています。
  • sort() 関数: 内部的にはイントロソート(クイックソート・ヒープソート・挿入ソートを組み合わせた手法)が使用されており、平均計算量は O(n log n) と非常に高速です。
  • ヘッダーのインクルード: sort() を使うには <algorithm> のインクルードが必須です。

降順でソートする場合

デフォルトでは昇順にソートされますが、第三引数に比較関数を渡すことで降順ソートも簡単に行えます。

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
   int arr[] = {52, 14, 85, 63, 99, 54, 21};
   int n = sizeof(arr) / sizeof(arr[0]);
   sort(arr, arr + n, greater<int>());
   for (int i = 0; i < n; i++)
      cout << arr[i] << " ";  // 出力: 99 85 63 54 52 21 14
}

このように、STLの sort() 関数を活用すれば、自前でソートアルゴリズムを実装することなく、少ないコードで効率的に配列を並べ替えることができます。

  1. C++のSTLを使って配列が回文かどうかを判定するプログラム

    整数 n 個からなる配列 arr[n] が与えられたとき、「その配列は回文(パリンドローム)か?」を判定するのが本稿のテーマです。C++ の STL(標準テンプレートライブラリ)を活用して、この問題をシンプルに解いていきます。 STLとは STL(Standard Template Library)は、C++ に用意されたテンプレートクラスの集合体で、スタック・キュー・リストといったデータ構造や、ソート・反転などの便利な関数を提供します。これらを活用するには、テンプレートクラスに関する基本的な知識が必要です。本稿では、STL の reverse() 関数を使って配列を反転させています。 回文と

  2. C++のnew演算子を使って2次元配列を動的に宣言・生成する方法

    動的な2次元配列とは、基本的に「配列へのポインタ」を要素とする配列(ポインタの配列)のことです。つまり、各行が独立した1次元配列としてヒープ上に確保され、それらの先頭アドレスを格納するポインタ配列によって全体が管理されます。下図は、3×4の2次元配列のイメージです。アルゴリズムC++のnew演算子で2次元配列を動的に確保する手順は以下の通りです。Begin 配列の寸法(行数・列数)を宣言する。 new を使って 2次元配列 a[][] を動的に確保する。 配列に要素を代入する。 配列の内容を出力する。 delete でメモリを解放する。 Endサンプルコ