文件名称:非递归对输入的数字进行全排列_C语言实现
文件大小:1KB
文件格式:C
更新时间:2012-12-16 10:08:03
全排列 非递归 C语言
上传之后才发现头文件少了个ctype.h,因为判断非法输入的时候用到了isalpha(),不加这个头文件的话在gcc下会有警告,在VC下可能编译不过! 首先把输入的各个数由小到大进行排序,然后开始 1.找出比右边数字小的第一个数,找到这个数后,把它的位置记下来.设这个位置为left_small;如果找不到,就说明排列完成了. 2.从右到左寻找第一个大于left_small所在值的数,设为right_big. 3.交换perm[left_small]与perm[right_big]的值. 4.反转perm[left_small+1]到perm[len]之间的值. 如果把整个排列当作一个数的话,实际上整个过程是由小到大的过程,找到的后一个排列刚好是比前一个排列大的最小排列,证明很简单,这里就不在赘述了!