笔记一:n个元素的所有排列递归算法

来源:互联网 发布:大数据 涂子沛 epub 编辑:程序博客网 时间:2024/05/01 21:24

求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的定义
0 0