啊哈磊_编程从这里起步

标题: 排序打印 [打印本页]

作者: xchief    时间: 2012-8-15 11:55
标题: 排序打印
如何把  1 2 3 4 按  1 2 3 4 ; 1 2 4 3 ; 1 3 2 4 ; 1 3 4 2 ; 1 4 2 3 ; 1 4 3 2 ; 2 1 3 4 ;.....等这样按先小后大的顺序进行排序?
作者: zhaoys    时间: 2012-8-15 11:55
你这是什么排序?
这样排吧!!
1234
2341
3421
4321
代码:
#include <stdio.h>
int main()
{
        int i,j,num[5]={1,2,3,4};
        int z;
        for(j=0;j<4;j++)
                printf("%d",num[j]);
        printf("\n");
        for(i=0;i<3;i++)
        {
                for(j=0;j<4-i;j++)
                {
                        if(num[j]<num[j+1])
                        {
                                z=num[j+1];
                                num[j+1]=num[j];
                                num[j]=z;
                               
                        }
                       
                       
                }
                for(j=0;j<=3;j++)
                        printf("%d",num[j]);
                printf("\n");
               
        }
       
        //printf("\n");
        sleep(5000);
        return 0;
}


作者: zhaoys    时间: 2012-8-18 23:21
1234
4123
4312
4321
#include <stdio.h>
int main()
{
        int i,j,num[4]={1,2,3,4};
        int z;
        for(j=0;j<4;j++)
                printf("%d",num[j]);
        printf("\n");
        for(i=3;i>0;i--)
        {
                for(j=3;j>3-i;j--)
                {
                        if(num[j]>num[j-1])
                        {
                                z=num[j];
                                num[j]=num[j-1];
                                num[j-1]=z;
                               
                        }
                       
                       
                }
                for(j=0;j<=3;j++)
                                printf("%d",num[j]);
                printf("\n");
               
        }
    //printf("\n");
        getchar();
    //sleep(5000);
        return 0;
}
       
作者: xchief    时间: 2012-8-19 10:31
..........这样的没规律的全排列我也会啊。。。。。我就是想要那种有规律的
#include <stdio.h>
#define N 4
void print(int *a)
{
    int i;
    for(i=0;i<N;i++)
        printf("%d",a[i]);
    printf("\n");
}

void sort(int *a,int n)
{
    int i,j,temp;
    if(n==1)
    {
        print(a);
        return;
    }
    for(i=0;i<n;i++)
    {
        sort(a,n-1);
        temp=a[0];
        for(j=1;j<=n-1;j++)
            a[j-1]=a[j];
        a[n-1]=temp;
    }
}

int main()
{
     int i,a[N]={0};
     for(i=0;i<N;i++)
         a[i]=i+1;
     sort(a,N);
     system("pause");
     return 0;
}

那种有规律的可不可以用栈 有知道的教教我
作者: zhaoys    时间: 2012-8-19 14:30
本帖最后由 zhaoys 于 2012-8-19 14:35 编辑

#include <stdio.h>
//你再试试这一个!还可用数组来做 献丑了!
int main()
{
        int i,j,k,z;
        for(i=1;i<=4;i++)
        {
                for(j=1;j<=4;j++)
                {
                        for(k=1;k<=4;k++)
                        {
                                for(z=1;z<=4;z++)
                                {
                                        if (i!=j && j!=k && k!=z && i!=k && i!=z && j!=z) //判断语句可用函数调用。
                                        {
                                                printf("%d %d %d %d\n",i,j,k,z);
                                        }
                                       
                                }
                                
                        }
                        
                }
               
        }
        return 0;
}
作者: zhaoys    时间: 2012-8-19 14:59
我是新手,还没学到栈。
作者: 凡夫俗子    时间: 2012-8-19 23:42
呃,这道题数据都不完全啊
作者: xchief    时间: 2012-8-20 16:02
zhaoys 发表于 2012-8-19 14:30
#include
//你再试试这一个!还可用数组来做 献丑了!
int main()

汗 你这个不能通用  每加一个数字就要加一个for  还要加几个if条件。。。
作者: xchief    时间: 2012-8-20 16:06
搞 了一天 终于搞了个模样出来了。。。

#include <stdio.h>
#include <stdlib.h>
#define N 4
void print(int*);
int fun(int*,int);
int check(int*,int);
int sum=0;
void sort(int *a,int x)  
{
    int i,j,t;
   
    if( x == N-1 ) {print(a);sum++;}
   
    while(a[x]<N && x<N-1)
    {         
        a[x]++;
        while(a[x]<N)
        {
            for(j=0;j<x;j++)
          if(a[x]==a[j])
                {
        a[x]++;
                    break;
                }
            if(j==x) break;
        }
        
        if(fun(a,x))
        {
            for(j=x+1;j<N;j++)
                a[j]=check(a,j);
            print(a);
            sum++;
        }
        
        if(x+1 < N-1) sort(a,N-2);      
    }
   
    if(a[x]==N && x>=1) sort(a,x-1);
   
}
int fun(int *a,int x)
{
    int i;
    for(i=0;i<x;i++)
        if(a[x]==a[i])
            return 0;
    return 1;
}
int check(int *a,int n)   
{
    int i,flag = 1;
    a[n]=1;
    while(a[n]<=N)
    {
        for(i=0;i<n;i++)
            if(a[n] == a[i])
            {
                a[n]++;
                break;
            }
        if(i==n) break;
    }
    return a[n];
}
void print(int *a)
{
    int i;
    for(i=0;i<N;i++)
        printf("%d",a[i]);
    printf("\n");
}
int main()
{
int a[N]={0};
    int i;
    for(i=1;i<=N;i++)
        a[i-1]=i;
    sort(a,N-1);
    printf("\nsum=%d\n",sum);
system("pause");
return 0;
}

N=4时 1 2 3 4 共有24种排列 按大到小结果为
1234
1243
1324
1342
1423
1432
2134
2143
2314
2341
2413
2431
3124
3142
3214
3241
3412
3421
4123
4132
4213
4231
4312
4321
sum=24
请按任意键继续. . .

N=5时 1 2 3 4 5 有120种排列

作者: xchief    时间: 2012-8-20 16:07
12345
12354
12435
12453
12534
12543
13245
13254
13425
13452
13524
13542
14235
14253
14325
14352
14523
14532
15234
15243
15324
15342
15423
15432
21345
21354
21435
21453
21534
21543
23145
23154
23415
23451
23514
23541
24135
24153
24315
24351
24513
24531
25134
25143
25314
25341
25413
25431
31245
31254
31425
31452
31524
31542
32145
32154
32415
32451
32514
32541
34125
34152
34215
34251
34512
34521
35124
35142
35214
35241
35412
35421
41235
41253
41325
41352
41523
41532
42135
42153
42315
42351
42513
42531
43125
43152
43215
43251
43512
43521
45123
45132
45213
45231
45312
45321
51234
51243
51324
51342
51423
51432
52134
52143
52314
52341
52413
52431
53124
53142
53214
53241
53412
53421
54123
54132
54213
54231
54312
54321

sum=120
请按任意键继续. . .
作者: xchief    时间: 2012-8-20 16:08
有哪位大侠可以帮忙优化下 或给出别的思路和代码也行  要能通用的,,呵呵
作者: xchief    时间: 2012-8-20 16:10
=student= 发表于 2012-8-19 23:42
呃,这道题数据都不完全啊

额  什么数据不全
作者: xchief    时间: 2012-8-20 16:13
=student= 发表于 2012-8-19 23:42
呃,这道题数据都不完全啊

这样说吧 先小后大的顺序 你可以理解为1234这四个数组成的四位数  1234是最小的 其次是1243,1324,1423......最大的是4321. 我题上面已经给出几个样例了
作者: 凡夫俗子    时间: 2012-8-20 16:18
xchief 发表于 2012-8-20 16:13
这样说吧 先小后大的顺序 你可以理解为1234这四个数组成的四位数  1234是最小的 其次是1243,1324,1423. ...

你是说现用C列出这几个数,再排序?
作者: 凡夫俗子    时间: 2012-8-20 16:20
xchief 发表于 2012-8-20 16:13
这样说吧 先小后大的顺序 你可以理解为1234这四个数组成的四位数  1234是最小的 其次是1243,1324,1423. ...

哦,明白了
作者: zhaoys    时间: 2012-8-21 19:12
xchief 发表于 2012-8-20 16:06
搞 了一天 终于搞了个模样出来了。。。

#include

噢!你要的是可变的。我没读懂问题。还有一个void sort()函数中是不是多定义了i,t两个变量?
作者: xchief    时间: 2012-8-22 11:10
zhaoys 发表于 2012-8-21 19:12
噢!你要的是可变的。我没读懂问题。还有一个void sort()函数中是不是多定义了i,t两个变量?

...是多了  忘了删了
作者: wkl    时间: 2012-9-5 20:26
xchief 发表于 2012-8-20 16:07
12345
12354
12435

这么长结果不会是手打的吧??怎么使黑框框中的结果写入txt?或其他
作者: 凡夫俗子    时间: 2012-9-6 08:58
wkl 发表于 2012-9-5 20:26:21

这么长结果不会是手打的吧??怎么使黑框框中的结果写入txt?或其他

点击左上角图标,选编辑+标记,选取内容后再选编辑+复制,最后粘贴就行了
作者: 凡夫俗子    时间: 2012-9-6 08:59
wkl 发表于 2012-9-5 20:26:21

这么长结果不会是手打的吧??怎么使黑框框中的结果写入txt?或其他

我指的是黑框里
作者: chengche    时间: 2012-9-8 14:31
快速排序吧
作者: 未来科技公司    时间: 2012-12-9 21:06
1234
4123
4312
4321
#include <stdio.h>
int main()
{
         int i,j,num[4]={1,2,3,4};
         int z;
         for(j=0;j<4;j++)
                 printf("%d",num[j]);
         printf("\n");
         for(i=3;i>0;i--)
         {
                 for(j=3;j>3-i;j--)
                 {
                         if(num[j]>num[j-1])
                         {
                                 z=num[j];
                                 num[j]=num[j-1];
                                 num[j-1]=z;
                                 
                        }
                        
                        
                }
                 for(j=0;j<=3;j++)
                                 printf("%d",num[j]);
                 printf("\n");
                 
        }
     //printf("\n");
         getchar();
     //sleep(5000);
         return 0;
}

作者: cha    时间: 2013-3-31 08:35
貌似有这种冒泡的算法把




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2