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

C++のstd::list::sort()でリストをソートする方法

C++標準ライブラリによるソートの概要

この記事では、C++の標準ライブラリを活用して配列や連結リスト(リンクリスト)をソートする方法について解説します。C++にはさまざまな用途に対応する多数のライブラリが標準で用意されており、ソート機能もその一つです。

std::list::sort()は、リストの要素を昇順に並べ替えるメンバ関数です。この関数は安定ソート(stable sort)であるため、値が等しい要素同士の相対的な順序は保持されます。要素の比較には、デフォルトでoperator<が使用されます。

サンプルコード

#include <iostream>
#include <list>
using namespace std;
int main(void) {
    list<int> l = {1, 4, 2, 5, 3};
    cout << "ソート前のリストの内容" << endl;
    for (auto it = l.begin(); it != l.end(); ++it)
        cout << *it << endl;
    l.sort();
    cout << "ソート後のリストの内容" << endl;
    for (auto it = l.begin(); it != l.end(); ++it)
        cout << *it << endl;
    return 0;
}

実行結果

ソート前のリストの内容
1
4
2
5
3
ソート後のリストの内容
1
2
3
4
5

補足:計算量と応用

std::list::sort()の計算量はO(n log n)です。リンクリストはランダムアクセスができないため、std::sort()をそのまま適用することはできませんが、std::listは独自のsort()メンバ関数を提供しており、内部でマージソートを用いて効率的にソートを行います。

また、降順でソートしたい場合は、比較関数としてstd::greater<int>()を引数に指定することも可能です。

  1. C++で連結リストをパーティション分割するアルゴリズム

    問題の概要連結リストと値 x が与えられたとき、リストを2つのグループに分割することを考えます。具体的には、「x 未満のノード」がすべて「x 以上のノード」よりも前に来るように並べ替えます。ただし、各グループ内ではノードの元の相対的な順序を保持しなければなりません。例えば、リストが [1,4,3,2,5,2]、x = 3 の場合、出力は [1,2,2,4,3,5] となります。3未満のノード(1, 2, 2)が先頭に集まり、3以上のノード(4, 3, 5)がその後に続きます。解法のアプローチこの問題は、ダミーノードを2つ使うことでシンプルに解決できます。手順は以下の通りです。初期値 -1 を持

  2. Pythonのsort()メソッド完全ガイド|昇順・降順・keyパラメータの使い方

    このチュートリアルでは、Pythonリストのsort()メソッドについて詳しく解説します。sort()メソッドは、リストを昇順または降順に並べ替えるために使用されるメソッドです。オプション引数の有無によって、さまざまな使い方ができます。 sort()メソッドはインプレース(破壊的)メソッドであり、呼び出すと元のリストが直接変更される点に注意しましょう。元のリストを残したい場合は、組み込み関数のsorted()を使用してください。 それでは、順番に見ていきましょう。 デフォルトのsort():昇順にソートする オプション引数を何も指定せずにsort()メソッドを呼び出すと、リストは昇順にソート