全排列的生成
来源:互联网 发布:linux 内核 视频 编辑:程序博客网 时间:2024/05/16 15:53
将会以生成一个’ABCDE’的一个全排列为例
全排列的生成,就是从后面数,找到第一符合顺序的(如: ‘D’ < ‘E’)这样的信号。就要开始处理。
处理方法是:
将找到这个符合顺序的位置(如:’B’ < ‘C’),那么就把’C’后面(包括’C’在内的字符串生成一个排好顺序(恢复熵值)),再从左边走,找到第一个比’B’大的字符,那么就把这两个字符的位置交换。
其实本质上是将比’B’大的数中最小的那个给拿出来,然后交换,再排好序,不过根据这样的算法,实现了同样的效果。
这是这个代码跟大多的全排列生成的不一样的地方
代码如下:
#include <iostream>using namespace std;// 用于生成全排列A-Estring s = "ABCDE";void sort(int start,int end){ // 采用easysort for (int i = start; i < end; ++i){ for (int j = i + 1; j <= end; ++j){ if (s[i] > s[j]){ char t = s[i]; s[i] = s[j]; s[j] = t; } } }} // 通过上述函数完成排序 // 我们先确认,在这时将后面部分给排好序先 void findALittleBigger(int j ,int start){ //end 默认为4就不用担心了 for (int i = start; i <= 4; ++i){ if (s[i] > s[j]){ char t = s[i]; s[i] = s[j]; s[j] = t; break; } } } int main(){ cout << s<< endl; for (int time = 0;time < 119; ++time){//进行199次筛选就好了 for (int i = 4; i > 0; --i) { if (s[i] > s[i - 1]){ //出现顺序数,就将s[i - 1]放到后面来,并且用s[i-1]中比s[i - 1]大的最小那个数放到这个位置上 sort(i, 4); findALittleBigger(i - 1, i); break; } } cout << s<< endl; }}
阅读全文
0 0
- 全排列的生成
- 全排列的生成
- 全排列的生成
- 生成字符串的全排列
- 全排列的生成算法
- 全排列的生成算法
- 全排列的生成算法
- 生成字符串的全排列
- 全排列的生成算法
- 全排列的生成算法
- 全排列的生成算法
- 全排列的生成算法
- 生成字符串的全排列
- 全排列的生成算法
- 全排列的生成方法
- 全排列的生成算法
- 全排列数的生成
- 八、全排列与组合的生成
- var与const与let之间的区别
- linux 抓包命令
- 软件测试基础知识总结
- 【已解决】NFS客户端写入NFS共享文件夹出错:Permission denied
- 2.CentOS系统操作指南
- 全排列的生成
- 程序设计C 实验三 题目六 统计出现最多次的字母(0288)
- 每天一个linux命令(51):lsof命令
- Android读书笔记(二)
- 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序
- ffmpeg关于h264编码提示h264_mp4toannexb的问题
- 学会DataHub服务让您可以轻松构建基于流式数据的分析和应用
- poj 1611 The suspects
- 【C】关于输入输出的报错