将一组数字全排列,比如1 2 3将这三个数字全排列:
123 132 213 231 321 312
1.观察以上几个数字,都是将第一个数字和其它数字(第二个数字或则第三个数字)交换得到另一个组合,比如123 将其第一个数字(1)跟第2个(2)或者第3个(3)交换,得到213 或 312,此时我们已经得到啦123,213,312这三个不同数字带领的组合。
swap(A,0,1)//交换第1个和第2个数字,此时是数组下标
swap(A,0,2)//交换第1个和第3个
这样,我们就可以用循环来进行两个数字的交换
//p:代表从第几个数字开始进行排列
//q:代表到第几个数字结束排列
//比如123 从第1个数字到第3个数字进行排列,此时p=0,q=2(下标形式)
for(int i=p;i<=q;i++){
swap(A,p,i);//交换第p个数和第i个数(此时也是下标表示)
}
2.再各对123 213 321 这三个数字的后两个数字进行全排列就是其第二个数字和第三个数字交换以下:123得到:132,213得到 231 ,321得到312,这样我们需要的数字全排列已经显现出来啦。
//再次进行排列,但是是对除第一个数之后的排列,比如123 213 321前面的数字都定好序了,再来对后面两个数字排列(将123的23排列变为23或32),此时进