c语言给定一个不包含重复的数组,返回所有可能的排列。
时间: 2024-03-09 14:47:12 浏览: 52
strncpy函数-C语言——数组
好的,这是一个经典的算法问题,可以使用递归实现。下面是一个简单的C语言程序,可以返回一个不包含重复元素的数组的所有排列:
```c
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void permute(int *arr, int start, int end) {
if (start == end) {
for (int i = 0; i <= end; i++) {
printf("%d ", arr[i]);
}
printf("\n");
} else {
for (int i = start; i <= end; i++) {
swap(&arr[start], &arr[i]);
permute(arr, start + 1, end);
swap(&arr[start], &arr[i]);
}
}
}
int main() {
int arr[] = {1, 2, 3};
int n = sizeof(arr) / sizeof(arr[0]);
permute(arr, 0, n - 1);
return 0;
}
```
在上面的程序中,我们定义了一个 `swap()` 函数,用于交换两个元素的位置。然后我们定义了一个 `permute()` 函数,用于计算给定数组的所有排列。在 `permute()` 函数中,我们使用递归来交换数组中的元素,直到我们得到了所有的排列。最后,我们在 `main()` 函数中调用 `permute()` 函数,并将数组和数组的起始和结束位置作为参数传递给它。
注意,此算法的时间复杂度为 O(n*n!),其中 n 是数组的长度。
阅读全文