该算法用于求得指定字符串的全排列 按数组输出其结果。利用递归思想,如果字符串只有一个字符 则其全排列 就是这个字符。如果有两个呢? 就是在一个字符的全排基础上再加上这个字符的两个位置。三个字符的串 (abc):同理视为 全排(a + bc)+全排(b + ac)+全排(c + ab)的全排;
(注: 对于字符串的分割 以及存入数组等操作 以OC封装的NSString类作为基本 比较方便 至于C怎么实现 这里不做过多解释)
NSArray *sortalgorithm(NSString *strOfValue)
{
//用于存储全排序列
NSMutableArray *marrOfSort = [[NSMutableArray alloc] init];
<span style="white-space:pre"> </span>//若字符串为单个字符 直接返回单个字符 的数组
if ([strOfValue length] == 0) {
[marrOfSort addObject:strOfValue];
return marrOfSort;
}
else
{
for (int i = 0; i < [strOfValue length]; i++) {
//依次选择分割哪一个字符
char OneOfChar = [strOfValue characterAtIndex:i];
NSMutableString *strOfDeleteOneChars = [NSMutableString stringWithString:strOfValue];
//分割字符串
[strOfDeleteOneChars deleteCharactersInRange:NSMakeRange(i, 1)];
NSArray *arrOfSub = sortalgorithm(strOfDeleteOneChars);/*递归*/
for (int j = 0; j < [arrOfSub count]; j++) {
NSString *strOfCombine = [NSString stringWithFormat:@"%c%@",OneOfChar,[arrOfSub objectAtIndex:j]];
[marrOfSort addObject:strOfCombine];
}
}
return marrOfSort;
}
}