收藏 分享(赏)

补充全排列算法C语言实现.doc

上传人:精品资料 文档编号:8452090 上传时间:2019-06-28 格式:DOC 页数:5 大小:18.51KB
下载 相关 举报
补充全排列算法C语言实现.doc_第1页
第1页 / 共5页
补充全排列算法C语言实现.doc_第2页
第2页 / 共5页
补充全排列算法C语言实现.doc_第3页
第3页 / 共5页
补充全排列算法C语言实现.doc_第4页
第4页 / 共5页
补充全排列算法C语言实现.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、字符串全排列算法 C 语言实现问题描述:输入一个字符串,打印出该字符串中字符的所有排列。输入:123输出:123132213231312321问题分析:现象分析:这种问题,从直观感觉就是用递归方法来实现即:把复杂问题逐渐简单化,进而得出具体代码实现。 (如何发现一个问题可以使用递归方式来解决? 经分析可以发现:M 个数的排列方法与 N(NM)个数的排列方法没有区别,处理方法与数据的个数没有关系。处理方法的一致性,就可以采用递归) 。3 个数(123)排列,第一位 1 不动,剩下两个数(23)的排列,只要相互颠倒一下,就可以出现关于 1 开头的所有排列 123 132把 2 换到第一位,保持不动

2、,剩下的两个数(13)的排列,只要相互颠倒一下,就可以出现关于 2 开头的所有排列 213 231同理,把 3 换到第一位,可得到 312 321扩展:把 3 个数的所有排列,前面加一个 4,就可以得到关于 4 开头的所有的排列412341324213423143124321若把 4 与后续数据中的任意一个数据交换,通过完成对后续三个数的全排列,就可以得到相应的数开头的四数的排列。总结:对 4 个数的排列,可以转换成首位不动,完成对 3 个数的排列对 3 个数的排列,可以转换成首位不动,完成对 2 个数的排列对 2 个数的排列,可以转换成首位不动,完成对 1 个数的排列对于 1 个数,无排列,

3、直接输出结果算法实现说明:对 n 个数的排列,分成两步:(1)首位不动,完成对 n-1 个数的排列,(2)循环将后续其他数换到首位,再次进行 n-1 个数的排列注:排列完成后,最终的串要与原串相同C 语言代码实现: #include #include /将串左移一位,首位存到末尾。void shift( char *s )if ( !s|!s0 ) return ; /security code . null stringchar ch=s0;int i=0;while( s+i )si-1=si ;si-1=ch;/本函数对于一个已排序好的数据进行全排列void permutation(ch

4、ar list, int head ) int i,len;len=strlen(list) ;if ( len-head = 1 ) /后续没有再排列的,则输出排列数据printf( “%sn“, list );elsefor (i = k; ibegin;i- )if ( send = si-1 )return 1;return 0;void permutation(char list, int k) int i,len;len=strlen(list) ;if ( len-k = 1 ) /后续没有再排列的,则输出排列数据printf( “%sn“, list );elsefor (i = k; ilen; i+) if ( !is_dup ( list,i,k ) ) /如果没有重复的,则进行相应的排列 ,否则跳过之,因为:相同的数据当队首,交换没有意义swap(/交换permutation(list, k+1); /后续串排列swap(/恢复 void pailie( char *str )permutation( str, 0 ); /排列算法,从串的第几位开始排列 int main() char str=“1234“;pailie(str);return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报