一尘不染

数组置换

algorithm

例如我有这个数组:

int a[] = new int[]{3,4,6,2,1};

我需要列出所有排列,以使如果一个像这样{3,2,1,4,6},其他的一定不能相同。我知道,如果数组的长度为 n, 那么就有 n!
可能的组合。该算法如何编写?

更新:谢谢,但是我需要一个伪代码算法,例如:

for(int i=0;i<a.length;i++){
    // code here
}

只是算法。是的,API函数很好,但是对我没有太大帮助。


阅读 332

收藏
2020-07-28

共1个答案

一尘不染

如果使用的是C
++,则可以std::next_permutation从头<algorithm>文件使用:

int a[] = {3,4,6,2,1};
int size = sizeof(a)/sizeof(a[0]);
std::sort(a, a+size);
do {
  // print a's elements
} while(std::next_permutation(a, a+size));
2020-07-28