字典排序算法实现全排列的步骤:
总结:
1.从右向左找,找到第一个比下一个元素还小的地方,记下位置,标注为左元素。
2.从右向左找,找到第一个比左元素大的元素,记下位置,标注为右元素。
3.交换左元素和右元素。
4.不管现在左元素位置上放的是谁,将左元素右边的序列逆序。
5.这样就得到了一个新数了。
6.可以继续重复1-5,来继续得到下一个排列。
7.如果再也找不到一个比下一个元素还小的地方,那么意味着这个序列已经降序了,排列完成了,那就结束吧。
#!/usr/bin/perl
print "请输入1以上的数(一个):\n";
my $endnum=<>;
my @src_array=(1..$endnum);
print "@src_array\n";
my $i=$#src_array;
while($i>0)
{
if($src_array[$i]>$src_array[$i-1])
{
$weizhi=$i-1;
&shit;
$i=$#src_array;
}
else
{
$i=$i-1;
}
}
sub shit
{
my $n=$#src_array;
while($n>0)
{
if($src_array[$n]>$src_array[$weizhi])
{
my $tempnum=$src_array[$n];
$src_array[$n]=$src_array[$weizhi];
$src_array[$weizhi]=$tempnum;
my @temp_array=splice @src_array,$weizhi+1;
push @src_array,sort(@temp_array);
print "@src_array\n";
last;
}
$n=$n-1;
}
}
system("pause");