一、字典序法
1) 从序列P的右端开始向左扫描,直至找到第一个比其右边数字小的数字,即。
2) 从右边找出所有比大的数中最小的数字,即。
3) 交换与。
4) 将右边的序列翻转,即可得到字典序的下一个排列。
5) 重复上面的步骤,直至得到字典序最大的排列,即左边数字比右边的大的降序排列。
二、SJT Algorithm
初始状态为。
1) 找到最大的可移动数m(当一个数指向一个比它小的数是,该数就是可移动数)
2) 交换m和m所指向的数
3) 改变所有比m大的数的方向
4) 重复上面的步骤,直至找不到可移动数
三、Heap‘s Algorithm
procedure generate(n : integer, A : array of any): if n = 1 then output(A) else for i := 1; i ≤ n; i += 1 do generate(n - 1, A) if n is odd then j ← 1 else j ← i swap(A[j], A[n])
以上算法描述摘自维基百科
全排列算法(字典序法、SJT Algorithm 、Heap's Algorithm)
时间: 2024-10-15 04:09:50