筆記一:n個元素的所有排列遞迴演算法
阿新 • • 發佈:2018-12-25
求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;
}
結果:
知識積累:
在新建工程時犯了錯誤,直接選擇新建空專案,導致執行時控制檯一閃而過。解決的辦法:
- 重新建立一個Win32控制檯應用程式
- 配置屬性—連結器—系統—子系統中,找到控制檯,選定並應用。
copy函式:
- 標頭檔案是
<algorithm>
。將一定範圍的元素進行復制。具體可參考:copy的詳細解釋
- 標頭檔案是
ostream_iterator:
- 標頭檔案是
<iterator>
。流迭代器,“ ”表示每一輸出流之間的間隔符。具體可參考:ostream_iterator的定義
- 標頭檔案是