以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 快速全排列字母(算法) (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=87473) |
-- 作者:葛靖青001 -- 发布时间:11/4/2010 4:51:00 PM -- 快速全排列字母(算法) 全排列,比如字母ABC,所有排列有A ,AB,AC,ABC,ACB,B,BA,BC,BAC,BCA,C,CA,CB,CAB,CBA. //原理是插入, 在一个字符串的所有位置插入新字符. //如: AB 插入C , 位置有 1A2B3, 插入后形成 CAB ACB ABC char *AllList(char *str, int *pNum) { int i, j, k, n; int len = strlen(str); int Total = 0; int count, oldcount; int size; char *Buf; char *p, *p1; if (len > 10) return NULL; //计算总的组合数目 for (i = 0, j = 1; i < len; i++) { j *= (len - i); Total += j; } //创建二维数组, 存放全部组合 size = len + 1; if ((Buf = (char *)malloc(Total * size)) == NULL) { return NULL; } for (k = 0, count = 0; k < len; k++) //所有要插入的字符 { oldcount = count; p = Buf; p1 = Buf + count * size; for (i = 0; i < oldcount; i++, p += size) //插入到所有字符串中,形成新的字符串 { n = strlen(p); for (j = 0; j <= n; j++, count++, p1 += size) //在字符串所有位置插入 { memcpy(p1, p, n); p1[n] = p1[j]; p1[j] = str[k]; p1[n + 1] = ' 在我的机器上排列10个字母大约0.5秒。 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
4,482.422ms |