1. 程式人生 > >筆記一:n個元素的所有排列遞迴演算法

筆記一:n個元素的所有排列遞迴演算法

求n個元素的所有排列組合

問題:給定n個元素,設序列為{a,b,c},求所有的排列組合。

思路:每次遞迴,對組合的第一個元素排序。
這裡寫圖片描述

程式碼:

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

template<class T>
void permutation(T list[], int k, int m)
{
    if (k == m)
    {
        copy(list, list + m + 1, ostream_iterator<T>(cout
, "")); //將當前list排序 cout << endl; } else{ for (int i = k; i <= m; i++) { swap(list[i], list[k]); //將下標為i的元素交換到k位置,類似從list[k:m]中剔除操作 permutation(list, k + 1, m); swap(list[i], list[k]); } } } int main(int argc, char
* argv[]) { char arr[3] = { 'a', 'b', 'c' }; cout << "排序結果如下:" << endl; permutation(arr, 0, 2); return 0; }

結果:

這裡寫圖片描述

知識積累:

  1. 在新建工程時犯了錯誤,直接選擇新建空專案,導致執行時控制檯一閃而過。解決的辦法:

    • 重新建立一個Win32控制檯應用程式
    • 配置屬性—連結器—系統—子系統中,找到控制檯,選定並應用。
  2. copy函式:

    • 標頭檔案是<algorithm>。將一定範圍的元素進行復制。具體可參考:copy的詳細解釋
  3. ostream_iterator:

    • 標頭檔案是<iterator>。流迭代器,“ ”表示每一輸出流之間的間隔符。具體可參考:ostream_iterator的定義