c_cpp 非递归n! C中的排列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 非递归n! C中的排列相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<time.h>

void roll(int a[],int l,int r){
  //roll [l,r) leftward
  int tmp=a[l],i;
  for(i=l;i<r-1;i++)
    a[i]=a[i+1];
  a[r-1]=tmp;
}

void rollR(int a[],int l,int r){
  //roll [l,r) rightward
  int tmp=a[r-1],i;
  for(i=r-1;i>l;i--)
    a[i]=a[i-1];
  a[l]=tmp;
}

void print(int a[],int len){
  int i;
  for(i=0;i<len;i++){
    printf("%2d ",a[i]);
  }
  printf("\n");
}

int main(){
  int n,i,rb;
  long long int cnt=0;
  scanf("%d",&n);
  int a[n];
  
  //initialize values
  for(i=0;i<n;i++)
    a[i]=i+1;
    
  printf("Listing %d! permutation\n",n);
  clock_t start=clock();
  while(1){
    rb=n;
    for(i=0;i<n;i++){
      cnt++;
      roll(a,0,n);
    }
    while(a[rb-1]==rb&&rb>0){
      rb--;
      roll(a,0,rb);
    }
    if(rb==0)
      break;
  }
  printf("---\nDone(%.2lf ms). %d permutations.",(double)(clock()-start)/CLK_TCK*1e3,cnt);
}

以上是关于c_cpp 非递归n! C中的排列的主要内容,如果未能解决你的问题,请参考以下文章

汉诺塔的非递归实现(栈)

c_cpp 归并排序的非递归实现,慢于标准库

c_cpp 树的前序,中序和后序的非递归实现

全排列的非递归算法

C语言的两个问题: 所有的递归程序均可以用非递归算法实现?递归函数中的形式参数是自动变量吗? c语言中

递归函数生成全排列