全排列输出 c语言

输出n的全排列,排列输出按照字典序

递归总是觉得越学越不懂啊...

#include<stdio.h>

void swap(int *a,int *b){ //交换
    int t;
    t=*a;
    *a=*b;
    *b=t;
}

void copy(int s,int e,int *arr1,int *arr2){ //复制数组  现在想想感觉用strcpy好像也行?
    int i;
    for(i=s;i<=e;i++) arr1[i]=arr2[i];
}

void farr(int *arr,int s,int e){        //farr可以输出arr数组中从s到e的全排列
    int i;
    int tem[10];
    if(s==e){
        for(i=0;i<=e;i++) printf("%d",arr[i]);
        printf("\n");
        return;
    }
    else{
        for(i=s;i<=e;i++){

            //依次将第i个元素与首元素交换
       //每次交换后需要记录之前的顺序,
       //如123,213,312就是先把1与1交换得到123,记录,输出后面元素的全排列,
       //恢复至123,再将12交换得到213,记录,输出后面元素的全排列,恢复至213,
       //再将23交换得到312,记录,输出后面元素的全排列
swap(&(arr[s]),&(arr[i]));交换 copy(s,e,tem,arr);//存储此处数组用于复原 farr(arr,s+1,e);//输出首元素后面元素的全排列 copy(s,e,arr,tem);//复原数组 } return; } } int main(){ int i,n; int arr[10]; scanf("%d",&n); for(i=0;i<=n-1;i++) arr[i]=i+1; farr(arr,0,n-1); return 0; }

 

posted @ 2021-10-15 20:27  朗风lwind  阅读(454)  评论(0)    收藏  举报