【算法】数组全排列

zjk 发布于 2024-03-12 113 次阅读


算法思路

使用递归,通过不断交换数组中的元素来生成不同的排列:

  1. 从索引 s 开始,逐个将索引 s 和之后的索引 i 进行交换,形成新的排列。
  2. 递归地对剩余的元素进行相同操作,即固定下一个位置的元素。
  3. 当 s 达到数组的末尾时,即 s == len(arr),表示已经生成了一个完整的排列,将其打印出来。
  4. 重复以上步骤,直到生成所有可能的排列。

这个算法通过递归和元素交换的方式,不断生成新的排列,直到生成了所有可能的排列为止。

def getTotalSort(arr, s):
    if s != len(arr):
        for i in range(s, len(arr)):
            arr[s], arr[i] = arr[i], arr[s]
            getTotalSort(arr, s + 1)
            arr[s], arr[i] = arr[i], arr[s]
    else:
        print(arr)

arr = [1, 2, 3, 4]
getTotalSort(arr, 0)