也有递归实现版本,耗时之大难以接受,给个字典序实现的,也是最人性化的实现方式,ms时间效率依然不敢恭维,有待优化。也是STL算法next_permutation的思想。之前光用STL觉得狠省心,后来负罪感越来越重,于是挑个风和日丽,心情凉爽,性欲冷淡的日子认真看了看模拟实现的方式!留下一笔记录心得。
初始是升序的排列(当然,也可以实现为降序)作为当前排列开始,然后依次计算当前排列的下一个字典序排列。对当前排列从后向前扫描,找到一对为升序的相邻元素,记为i和j(i < j)。如果不存在这样一对为升序的相邻元素,则所有排列均已找到,算法结束;否则,重新对当前排列从后向前扫描,找到第一个大于i的元素k,交换i和k,然后对从j开始到结束的子序列反转,则此时得到的新排列就为下一个字典序排列。算法C++实现如下: