Get The Whole Arrangement of String ( PNN )

Get The Whole Arrangement of String ( PNN )
Get the whole arrangement of a string.
I got no better method to get this kind of sorting sequence.
Here is a simple implementation of printing whole arrangement.
Better one is expected now...
 1 
 2  #include  < assert.h >
 3  #define  N 10 /* do not set a big number for n! */
 4 
 5  /* *
 6   * str target string.
 7   * oka sorted content.
 8    */
 9  void  pnn( char *  str,  char *  oka)
10  {
11       /*  check str  */
12      assert(str  !=  NULL  &&  strlen(str)  <=  N  &&  strlen(str)  >=   1 );
13       if  (strlen(str)  ==   1 ) {
14          printf( " %s%c\n " , oka,  * str);
15           return ;
16      }
17       /*  i to record which char need to be sort now  */
18       int  i  =   0 ;
19       while ( 1 ) {
20           /*  define new container for input str to swap char  */
21           char  ipt[N];
22          memcpy(ipt, str, strlen(str) + 1 );
23           /*  define new container for output str to add char  */
24           char  opt[N];
25          memcpy(opt, oka, strlen(oka) + 1 );
26           /*  get position of char to be sort now  */
27           char *  ptr  =  ipt  +  i ++ ;
28           if ( * ptr  ==   ' \0 ' break ;
29           /*  swap char with the first one in ipt  */
30           if (ptr  !=  ipt) {
31               * ptr  ^=   * ipt;
32               * ipt  ^=   * ptr;
33               * ptr  ^=   * ipt;
34          }
35           /*  add char into opt as the last one and set '\0' to end the opt  */
36          opt[strlen(oka)]  =   * ipt;
37          opt[strlen(oka) + 1 =   ' \0 ' ;
38           /*  recursively sort next char  */
39          pnn(ipt + 1 , opt);
40      }
41  }
42 
43  void permutation( char *  str)
44  {
45       char  aim[N];
46      memcpy(aim, str, strlen(str) + 1 );
47       char  oka[ 1 =  { ' \0 ' };
48      pnn(aim, oka);
49  }
50 
51  int  main( int  argc, _TCHAR *  argv[])
52  {
53      permutation( " 1234567 " );
54      getchar();
55       return   0 ;
56  }


你可能感兴趣的:(Get The Whole Arrangement of String ( PNN ))