对数据长度为n的数组内的数据进行全排列,c语言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对数据长度为n的数组内的数据进行全排列,c语言相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<math.h>
int ans[15];
int a[15],n;
int used[15]=0;
void DFS(int deep)

int i;
if(deep==n)

for(i=0;i<n;i++)

printf("%d ",ans[i]);

puts("");
return ;

for(i=0;i<n;i++)

if(used[i])continue;
used[i]=1;
ans[deep]=a[i];
DFS(deep+1);
used[i]=0;


int main()

int i;
scanf("%d",&n);
for(i=0;i<n;i++)scanf("%d",&a[i]);
DFS(0);
return 0;
参考技术A 问题描述不清楚追问

输入第一行是数组长度
第二行是数组内容
输入:
3
1 2 3
输出:
1 2 3
2 1 3
2 3 1
3 1 2
3 2 1
1 3 2
我想用递归

参考技术B 排列有很多种方法的,你搞哪一种?追问

输入第一行是数组长度
第二行是数组内容
输入:
3
1 2 3
输出:
1 2 3
2 1 3
2 3 1
3 1 2
3 2 1
1 3 2
我想用递归

参考技术C 这个问题还只能用递归

C语言中用数组如何对数据进行大小排列,可有程序参考?谢谢!

#define NUM 10
main()

int a[NUM],i,j,r,temp;
printf("please input %d number\n",NUM);
for(i=0;i<NUM;i++)
scanf("%d",&a[i]);
for(i=0;i<NUM-1;i++)
r=i;
for(i=i+1;j<NUM-1;j++)
if(a[i]<a[r])
r=j;
if(r!=i)
temp=a[i];
a[i]=a[r];
a[r]=temp;


printf("The array after sort:\n");
for(i=0;i<NUM;i++)
printf("%5d",a[i]);
printf("\n");
getch();
这个程序有没有问题?能不能解释一下?

我把你的程序作了如下修改:
#define NUM 10
main()

int a[NUM],i,j,r,temp;
printf("please input %d number\n",NUM);
for(i=0;i<NUM;i++)
scanf("%d",&a[i]);
for(i=0;i<NUM-1;i++)
/*我这里没有使用r=i*/
for(j=i+1;j<NUM-1;j++)
/*你的程序问题就在这里了,我这里是j=i+1,你那里是i=i+1,j没有初值不说,还让i加1,这就意味这使外循环少执行几次*/
if(a[i]<a[j])

temp=a[i];
a[i]=a[j];
a[j]=temp;


printf("The array after sort:\n");
for(i=0;i<NUM;i++)
printf("%5d",a[i]);
printf("\n");
getch();
参考技术A #define NUM 10 //定义一个数,其大小为十
main()

int a[NUM],i,j,r,temp; //上面就不用说了吧
printf("please input %d number\n",NUM); //输出num的值
for(i=0;i<NUM;i++) //循环语句
scanf("%d",&a[i]); //输入数组a[i]
for(i=0;i<NUM-1;i++)
r=i;
for(i=i+1;j<NUM-1;j++)
if(a[i]<a[r])
r=j;
if(r!=i)
temp=a[i];
a[i]=a[r];
a[r]=temp;
//以上为各个数比较大小,然后大小交换位置

printf("The array after sort:\n"); //输出排序后的的数字
for(i=0;i<NUM;i++)
printf("%5d",a[i]);//逐个输出数组的值
printf("\n"); //空行
getch();

以上是关于对数据长度为n的数组内的数据进行全排列,c语言的主要内容,如果未能解决你的问题,请参考以下文章

UVA11077 Find the Permutations

C语言全排列问题为啥用指针比数组慢很多?

c语言全排列

关于全排的递归算法

leetcode 46. 全排列

C. Binary Search