您的位置:首页 > 其它

字典序全排列

2017-07-12 19:03 225 查看
思路:从左向右找到不符合递增规律的第一个数,比如1,2,5,4,3中的这个数就是2,将其与其右面递增序列中的比他大的最小数,比如在前面例子中的3互换,得到1,3,5,4,2,最后,将该数右边的递增序列排序,得到1,3,2,4,5即可。上面这个是求某一个数的下一个排列,而全排列只需按这个思路,将初始数组设置为从小到大排列的数组即可得到排列。

public class 字典序全排列 {
public static int Min(int array[],int index,int num)
{
int low=index;
for(int i=index+1;i<array.length;i++)
{
if(array[low]>array[i]&&array[i]>num)
{
low=i;
}
}
return low;
}
public static void Permutation(int array[])
{
boolean judge=true;
System.out.println(Arrays.toString(array));
while(judge)
{
for(int i=array.length-1;i>=1;i--)
{
if(array[i]>array[i-1])
{
int low=Min(array,i,array[i-1]);
array[i-1]=array[i-1]^array[low];
array[low]=array[low]^array[i-1];
array[i-1]=array[i-1]^array[low];
Arrays.sort(array,i,array.length);
System.out.println(Arrays.toString(array));
break;
}
if(i==1)
{
judge=false;
}
}
}
}
public static void main(String[] args) {
int array[]={1,3,5,7,9};
Permutation(array);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: