版本一: // test27.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> using namespace std; void permutation(char * str,char * pbegin){ if(!str||!pbegin) return ; if(*pbegin=='/0') printf("%s/n",str); else{ for(char * p_ch=pbegin;* p_ch;++p_ch){ char temp=*p_ch; *p_ch=*pbegin; *pbegin=temp; permutation(str,pbegin+1); temp=*p_ch; *p_ch=*pbegin; *pbegin=temp; } } } void permutation(char * str){ permutation(str,str); } int main(int argc, char* argv[]) { char str[]="abcd"; permutation(str); return 0; } 版本二: #include <stdio.h> inline void Swap(char& a, char& b) {// 交换a和b char temp = a; a = b; b = temp; } void Perm(char list[], int k, int m) { //生成list [k:m ]的所有排列方式 int i; if (k == m) {//输出一个排列方式 for (i = 0; i <= m; i++) putchar(list[i]); putchar('/n'); } else // list[k:m ]有多个排列方式 // 递归地产生这些排列方式 for (i=k; i <= m; i++) { Swap (list[k], list[i]); Perm (list, k+1, m); Swap (list [k], list [i]); } } int main() { char s[]="123"; Perm(s, 0, 2); return 0; }