标签:style blog color 使用 os strong io 数据
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
每个测试案例包括1行。
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
对应每组数据,按字典序输出所有排列。
abcBCA
abcacbbacbcacabcbaABCACBBACBCACABCBA
代码:
/* 字符串的排列 by Rowandjj 2014/8/2 */ #include<stdio.h> #include<string.h> #include<stdlib.h> char result[400000][10]; int count = 0; //递归输出全排列 void Permutation(char *pStr,char *pBegin) { /* 先将第一个字符与后面所有字符分别进行交换,接着 将第一个字符固定,然后将第二个字符与后面所有字符交换 所有可以使用递归 */ if(*pBegin == '\0') { strcpy(result[count++],pStr); //printf("%s\n",pStr); }else { for(char *pCh = pBegin; *pCh != '\0'; pCh++) { char temp = *pCh; *pCh = *pBegin; *pBegin = temp; Permutation(pStr,pBegin+1); temp = *pCh; *pCh = *pBegin; *pBegin = temp; } } } void Permutation(char *pStr) { Permutation(pStr,pStr); } int partition(int low,int high) { char temp[10]; strcpy(temp,result[low]); while(low < high) { while(low < high && strcmp(result[high],temp) >= 0) { high--; } strcpy(result[low],result[high]); while(low < high && strcmp(result[low],temp) <= 0) { low++; } strcpy(result[high],result[low]); } strcpy(result[low],temp); return low; } void quickSort(int low,int high) { if(result == NULL || low >= high) { return; } int index = partition(low,high); quickSort(low,index-1); quickSort(index+1,high); } int main() { char s[10]; while(scanf("%s",s) != EOF) { Permutation(s); quickSort(0,count-1); for(int i = 0 ; i < count; i++) { if(strcmp(result[i],result[i+1]) == 0) { continue; } printf("%s\n",result[i]); } count = 0; } return 0; }
标签:style blog color 使用 os strong io 数据
原文地址:http://blog.csdn.net/chdjj/article/details/38350051