算法描述:
输入一个字符串,打印出该字符串中字符的所有排列
把一个字符串看成两部分组成:第一部分为它的第一个字符,第二部分是后面的所有字符。
算法实现:
/*************************************************************************
> File Name: main.c
> Author: cyf
> Mail: XXX@qq.com
> Created Time: 2016年04月27日 星期三 09时00分26秒
************************************************************************/
#include "permutation.h"
int main()
{
char buff[] = "abc";
permutation(buff, buff);
return 0;
}
/*************************************************************************
> File Name: permutation.h
> Author: cyf
> Mail: XXX@qq.com
> Created Time: 2016年04月27日 星期三 08时54分24秒
************************************************************************/
#ifndef _PERMUTATION_H
#define _PERMUTATION_H
#include <stdio.h>
#include <stdlib.h>
void permutation(char *pStr, char *pBegin);
#endif
/*************************************************************************
> File Name: permutation.c
> Author: cyf
> Mail: XXX@qq.com
> Created Time: 2016年04月27日 星期三 08时59分11秒
************************************************************************/
#include "permutation.h"
/*
* 输入一个字符串,打印出该字符串中字符的所有排列
* */
void permutation(char *pStr, char *pBegin)
{
if (pStr == NULL || pBegin == NULL)
return;
if (*pBegin == '\0')
{
printf("%s\n", pStr);
}
else
{
char *pChar = pBegin;
for (pChar = pBegin; *pChar != '\0'; ++pChar)
{
char tmp = *pChar;
*pChar = *pBegin;
*pBegin = tmp;
permutation(pStr, pBegin + 1);
tmp = *pChar;
*pChar = *pBegin;
*pBegin = tmp;
}
}
}
CC = gcc
CFLAGS = -g -O2 -Wall
%.o:%.c
$(CC) -o $@ -c $(CFLAGS) $<
main:main.o permutation.o
$(CC) main.o permutation.o -o main $(CFLAGS)
clean:
rm -rf *.o main