下面的代码主要是用了快速排列函数qsort

用其排序还是很方便的

#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 /* 学习库函数qsort*/
int cmp(const void *a, const void *b)
 {
     return *(char *)a - *(char *)b;//从小到大,反之,从大到小 
 }

int main()
 {
     char str[20];
     int i, n, m, fact[20] = {1},t;
     for (i = 1; i <= 10; i++)
         fact[i] = fact[i - 1] * i; //计算1~10的阶乘
 
    while (scanf("%s%d", str, &m) == 2)
     {
         n = strlen(str);
         qsort(str, n, 1, cmp); //给字符串排序
         while (n--)
         {
             t = m / fact[n];
             putchar(str[t]); //输出第m个排列的一个字符
             m = m % fact[n]; 
             for (i = t; str[i]; i++) //去掉被输出的字符
                 str[i] = str[i + 1]; 
         }
         putchar('\n');
     }
     return 0;
 }


http://baike.baidu.com/link?url=v6f6fiTkHAa5Ge20fFEPL4GHKZ_pg2Vm1Qk0VZnXzwxVXbXmAZF68z1t0eUSSQpAyyqCU6xYr9bnAz6lUy78yq