用请编写递归函数,输出1,2,3,….n的全排列(n小于10),并观察n逐步增大时程序的运行时间。

用请编写递归函数,输出1,2,3,….n的全排列(n小于10),并观察n逐步增大时程序的运行时间。用c语言... 用请编写递归函数,输出1,2,3,….n的全排列(n小于10),并观察n逐步增大时程序的运行时间。用c语言 展开
 我来答
B2K1bonPplR
2016-09-11 · TA获得超过2049个赞
知道小有建树答主
回答量:1156
采纳率:72%
帮助的人:393万
展开全部
#include <stdio.h>
#include <time.h>

void init(int a[], int length);
void p(int a[], int length, int i);
void swap(int a[], int i, int j);
void print(int a[], int length);

int main() {
  int i = 0, length;
  clock_t start, end;
  int a[10];
  double t[10];
  for (i = 0; i < 10; i++) {
    length = i + 1;
    init(a, length);
    start = clock();
    p(a, length, 0);
    printf("\n");
    end = clock();
    t[i] = (double) (end - start) / CLOCKS_PER_SEC;
  }
  printf("分别耗时:\n");
  for (i = 0; i < 10; i++) {
    printf("%f\n", t[i]);
  }
  return 0;
}

void init(int a[], int length) {
  int i = 0;
  for (i = 0; i < length; i++) {
    a[i] = i + 1;
  }
}

void p(int a[], int length, int i) {
  int j = 0;
  if (i == length - 1) {
    print(a, length);
    return;
  }

  p(a, length, i + 1);

  for (j = i + 1; j < length; j++) {
    swap(a, i, j);
    p(a, length, i + 1);
    swap(a, i, j);
  }
}

void swap(int a[], int i, int j) {
  int temp = a[i];
  a[i] = a[j];
  a[j] = temp;
}

void print(int a[], int length) {
  int i = 0;
  for (i = 0; i < length; i++) {
    printf("%d ", a[i]);
  }
  printf("\n");
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式