C语言实现:输出1到5的全排列
C语言实现:输出1到5的全排列
这篇文章将带您学习如何使用C语言编写程序,输出数字1, 2, 3, 4 和 5 的所有升序排列。
代码实现
以下是使用C语言编写的代码,用于输出给定数字1,2,3,4,5的所有升序排列的排列组合: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(' '); } 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, 4, 5}; int n = sizeof(arr) / sizeof(arr[0]); permute(arr, 0, n - 1); return 0;}
代码解释:
-
swap函数: 这个函数用于交换两个整数的值。它接收两个指向整数的指针作为参数,通过使用一个临时变量来交换它们的值。 -
permute函数: 这是核心函数,用于递归地生成所有排列。 - 它接收一个整数数组arr、起始索引start和结束索引end作为参数。 - 如果start等于end,表示已经到达递归的底部,当前排列已生成,将其打印出来。 - 否则,从start到end遍历数组: - 将当前元素arr[start]与arr[i]交换。 - 递归调用permute函数,将start + 1作为新的起始索引,以生成剩余元素的排列。 - 再次交换arr[start]和arr[i],以恢复数组到之前的状态,以便进行下一轮迭代。 -
main函数: - 定义一个整数数组arr,包含数字 1 到 5。 - 使用sizeof运算符计算数组长度n。 - 调用permute函数,传入数组、起始索引 0 和结束索引n-1,开始生成全排列。
总结
这段代码简洁明了地展示了如何使用递归的方式生成全排列。通过理解 swap 和 permute 函数的逻辑,您可以轻松地将其应用于其他类似的排列组合问题。
原文地址: http://www.cveoy.top/t/topic/lbS 著作权归作者所有。请勿转载和采集!