输出 可重叠元素数组的从小到大排列

Posted bboykaku

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输出 可重叠元素数组的从小到大排列相关的知识,希望对你有一定的参考价值。

问题 描述:

将一组整数输入到数组p,输出p从小到大的全排列,p的元素可重叠

代码描述:

 1 //从小到大可重排列
 2 #include<stdio.h>
 3 int A[20];
 4 int p[20];
 5 int n;
 6 
 7 void sort(int n,int *p)
 8 {
 9     for(int i=0;i<n-1;i++)
10     {
11         int min =i;
12         for(int j=i+1;j<n-1;j++)
13         {
14             if(p[j]<p[min]) min=j;
15         }
16         if(min!=i)
17         {
18             int temp=p[i];
19             p[i]=p[min];
20             p[min]=temp;
21         }
22     }
23 }
24 void permutation(int n,int *a,int *p,int cur)
25 {
26     if(cur==n)     //如果游标到了最后,输出即可
27     {
28         for(int i=0;i<n;i++) printf("%-3d",a[i]);
29         printf("
");
30         return;
31     }
32     else
33     {
34         for(int i=0;i<n;i++)
35         {
36             if(i&&p[i]==p[i-1]) a[cur++]=p[i];    //p[i]!=p[i-1]是为了避免相同的元素多排而重复输出
37             else                    
38             {
39                 int c1=0,c2=0;
40                 for(int j=0;j<n;j++) if(p[i]==p[j]) c1++;
41                 for(j=0;j<cur;j++) if(p[i]==a[j]) c2++;
42                 if(c2<c1)
43                 {
44                     a[cur]=p[i];
45                     permutation(n,a,p,cur+1);
46                 }
47             }
48         }
49     }
50 }
51 int main()
52 {
53     
54     while(scanf("%d",&n)==1)
55     {
56         for(int i=0;i<n;i++) scanf("%d",&p[i]);
57         sort(n,p);
58         permutation(n,A,p,0);
59     }
60     return 0;
61 }

运行结果:

技术图片

 

以上是关于输出 可重叠元素数组的从小到大排列的主要内容,如果未能解决你的问题,请参考以下文章

Java怎么让数组中元素按照牌值从小到大的顺序排列

算法:堆排序

树状数组求逆序数

java数组排序

C语言编程 数组从大到小排列

PHP For 循环 怎么能把 数组 从小到大排列呢