字符串的全排列next_permutaion
来源:互联网 发布:vb 修改批处理 编辑:程序博客网 时间:2024/05/17 01:11
前面写过一篇文章,用的递归的方式做的,这个是按照字典序来写的代码。同时也是c++标准库里面的代码,next_permutaion,非常精炼。
// 字典序的排列,找到下一个字典序的排列#include <iostream>#include <cstdlib>#include <cstring>const int N = 1024;///////////////void swap_value(char &val1, char &val2){ char tmp = val1; val1 = val2; val2 = tmp;}void reverse(char *key, int from, int to){ if (to <= from) return; int len = to - from + 1; int index = len / 2; int i = 0; int ind1 = 0; int ind2 = 0; for (i = 0; i < index; i++) { ind1 = from + i; ind2 = to - i; swap_value(key[ind1], key[ind2]); } return;}bool string_permutation(char *key, int len);void quicksort(char *key, int low, int high){ if (low >= high) return; int i = low; int j = high; char val = key[j]; while (i < j) { while (i < j && key[i] <= val) i++; key[j] = key[i]; while (i < j && key[j] > val) j--; key[i] = key[j]; } key[i] = val; quicksort(key, low, i-1); quicksort(key, i+1, high);}bool string_permutation(char *key, int len){ int i = 0; // 找到第一个升序的一个值 val for (i = len-2; i >= 0; i--) { if (key[i] >= key[i+1]) continue; break; } if (i < 0) { return false; } int k = 0; // 在i后面找到第一个比val大的值 for (k = len-1; k>i; k--) { if (key[k] <= key[i]) continue; break; } // 交换其值 swap_value(key[i], key[k]); // 倒序,然后输出 reverse(key, i+1, len-1); return true;}int main(int argc, char *argv[]){ char line[N] = "cbcd"; std::cout << "key string " << line << std::endl; int len = strlen(line); quicksort(line, 0, len-1); std::cout << line << std::endl; bool flag; flag = true; while (flag) { flag = string_permutation(line, len); if (flag) std::cout << line << std::endl; } return 0;}
阅读全文
0 0
- 字符串的全排列next_permutaion
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- Android 修改默认来电他,通知铃声
- Codeforces Round #432 题解
- laravel5.1 部署到lnmp
- 单链表中是否有环的问题
- [BZOJ2763][JLOI2011]飞行路线(图论)
- 字符串的全排列next_permutaion
- 51nod 1158 全是1的最大子矩阵
- Angular 信息管理表
- 插入排序
- 导弹拦截
- SSM整合所遇的坑
- hdu 1198Farm Irrigation
- 工厂学习总结(简写)
- eclipse阿里巴巴代码规范插件的使用