このアルゴリズムの効率 (O(n)) とは何か疑問に思っています:
- a[k] < a[k + 1] となる最大のインデックス k を見つけます。そのようなインデックスが存在しない場合、順列は最後の順列です。
- a[k] < a[l] となる最大のインデックス l を見つけます。k + 1 はそのようなインデックスであるため、l は明確に定義され、k < l を満たします。
- a[k] を a[l] と交換します。
- a[k + 1] から最後の要素 a[n] までの順序を逆にします。
最悪のケース O(n) = n (k が前の順列の最初の要素である場合)、最良のケース O(n) = 1 (k が前の順列の最後の要素である場合) を理解しています。
O(n) = n/2 と言えますか?