1. 给定一个长度为n的整数数组a[n]; 2. 对序列a[n]中的元素用递归算法列出全部排列; 3. 给出的排列存在数组b[n]中。
时间: 2023-05-11 13:07:28 浏览: 89
可以使用递归算法来列出全部排列,具体实现可以参考以下代码:
void permute(int a[], int l, int r) {
if (l == r) {
// 打印排列
for (int i = 0; i <= r; i++) {
printf("%d ", a[i]);
}
printf("\n");
} else {
for (int i = l; i <= r; i++) {
// 交换元素
int temp = a[l];
a[l] = a[i];
a[i] = temp;
// 递归
permute(a, l+1, r);
// 恢复原序列
temp = a[l];
a[l] = a[i];
a[i] = temp;
}
}
}
int main() {
int a[] = {1, 2, 3};
int n = sizeof(a) / sizeof(a[0]);
permute(a, 0, n-1);
return 0;
}
在这个例子中,我们给定了一个长度为3的整数数组a,然后调用permute函数来列出全部排列。permute函数的参数包括数组a、数组的起始下标l和结束下标r。在permute函数中,我们首先判断是否到达了排列的末尾,如果是,则打印排列;否则,我们从l到r遍历数组a,将a[l]与a[i]交换,然后递归调用permute函数,接着恢复原序列,继续遍历数组a。最终,我们可以得到全部排列。
阅读全文