字典序法全排列
2016-05-28 23:33
309 查看
找到某一字符串的所有可能排列的方法有很多,字典序法是其中一个,初始状态为字符从小到大排列,然后按照以下步骤进行(假设序列为p=p1p2…pn):
1. 从右至左寻找第一个比右边值小的数,下标为j
2. 从pj的右边开始寻找第一个比pj大的数中的最小的数pk
3. 交换pj和pk
4. 再将pj+1…pn倒转排序
1. 从右至左寻找第一个比右边值小的数,下标为j
2. 从pj的右边开始寻找第一个比pj大的数中的最小的数pk
3. 交换pj和pk
4. 再将pj+1…pn倒转排序
#include <iostream> #include <string> using namespace std; int main() { int n;//length of string cin >> n; int *a = new int ; for (int i = 0; i < n; i++) cin >> a[i]; int r = n - 1; int j=r; while (1) { for (int i = 0; i < n; i++) cout << a[i]; cout << " "; j = r; while (j!=0&&a[j]<a[j-1]) { j--; } j = j - 1; if (j==-1) { break; } int k = j + 1; for (int i = k; i < n;i++) { if (a[i]>a[j]&&a[i]<a[k]) { k = i; } } int temp = a[j]; a[j] = a[k]; a[k] = temp; int len = n - j - 1; for (int i = j+1; i <= j+1+len / 2-1;i++) { int temp2 = a[i]; a[i] = a[len+j+1-i]; a[len + j+1 - i] = temp2; } } delete[] a; return 0; }
相关文章推荐
- Linux下安装gcc,gdb,MySQL以及vim的配置
- c字符和字符串操作
- codeforces Hill Number 数位dp
- MyEclipse打开出现java.lang.reflect.InvocationTargetException
- [线性规划与网络流24题] 餐巾计划问题
- fastjson使用 -- @JSONField使用
- JavaScript中变量的定义方式
- ADB 有用的命令
- iOS内存优化常用方法
- Java RMI 入门指南
- Eclipse新建maven项目, ivy+ant项目或gradle项目
- 开博第一遍
- grunt使用小记
- Ubuntu14.04LTS root账户登录
- 防止linux命令执行中断
- eclipse 优化
- sourcetree(mac)设置代理
- 计蒜客-数正方形
- 关于PHP的in_array新发现
- 安卓OneNote登陆和同步问题