字符串的排序

输入一个字符串,打印出该字符串中字符的所有排序。

思路:把字符串看成2部分。第1部分是它的第一个字符,第2部分是后面所有字符。

求全排列分成2部分。第1:求所有可能出现在第一个位置的字符,即把第一个字符和后面的所有字符进行交互。第2:固定第一个字符,求后面所有字符的全排列。这时候,仍然把后面所有字符分成2部分,同理。

参考代码:

root@gt:/home/git/Code# ./a.out 
abc
acb
bac
bca
cba
cab
root@gt:/home/git/Code# cat permutation.c 
#include <stdio.h>

void core(char* pstr,char* pbegin)
{
    if(*pbegin == '\0')
    {
        printf("%s\n",pstr);
    }
    else
    {
        for(char* pch = pbegin;*pch != '\0';++pch)
        {
            char temp = *pch;
            *pch = *pbegin;
            *pbegin = temp;

            core(pstr,pbegin + 1);

            temp = *pch;
            *pch = *pbegin;
            *pbegin = temp;
        }
    }
}

void permutation(char* pstr)
{
    if(pstr == NULL)
        return;
    core(pstr,pstr);
}

int main()
{
    char pstr[] = {'a','b','c','\0'};
    permutation(pstr);
    return 0;
}

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐