| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 697 人关注过本帖
标题:关于排序的问题
只看楼主 加入收藏
mikelr
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:67
专家分:161
注 册:2010-3-17
结帖率:66.67%
收藏
已结贴  问题点数:5 回复次数:8 
关于排序的问题
将一整数列按奇数在前,偶数在后的顺序排列,并要求奇偶2部分均分别有序

假设有10个数字 2  8 13 20 9 1 45 33 48 7

现在要改变成 1 7 9 13 33 45 2 8 20 48
2010-04-19 20:21
雨夜星光
Rank: 4
等 级:业余侠客
帖 子:66
专家分:230
注 册:2009-11-25
收藏
得分:1 
#include<stdio.h>
#define M 100
main()
{
    int a[M],b[M],c[M],n,i,t,j,q=0,o=0;
    printf("你要输入几个数进行排序?\n");
    scanf("%d",&n);
    printf("请开始输入排序的数字:\n");
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
        if(a[i]%2==1)b[q++]=a[i];
        else c[o++]=a[i];
    }
    printf("排序中……\n");
    for(i=0;i<q;i++)
    {
        for(j=i+1;j<q;j++)
        {
            if(b[i]>b[j])
            {
                t=b[i];
                b[i]=b[j];
                b[j]=t;
            }
        }

    }//基数排序结束
    for(i=0;i<q;i++)
        printf("%d  ",b[i]);
    for(i=0;i<o;i++)
    {
        for(j=i+1;j<o;j++)
        {
            if(c[i]>c[j])
            {
                t=c[i];
                c[i]=c[j];
                c[j]=t;
            }
        }
    }//偶数排序结束
    for(i=0;i<o;i++)
        printf("%d  ",c[i]);
    printf("\n");
}

我觉得我的算法不太好,内存开销太大了。看过的可以随便给点意见,谢谢。

C/C++交流群:65802335
2010-04-19 22:29
wxf8888
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2010-4-19
收藏
得分:1 
#include"stdio.h"
main()
{
   int m=0,n=0,i,j,t;
   int a[10];
   int b[10];
   int c[10];
   printf("Please input 10 numbers:");
   for(i=0;i<10;i++)
   scanf("%d",&a[i]);
   for(i=0;i<10;i++)
     for(j=0;j<9;j++)
      if(a[j]>a[j+1])
        {
           t=a[j];
           a[j]=a[j+1];
           a[j+1]=t;
        }
   for(i=0;i<10;i++)
    {
       if(a[i]%2!=0)
           {b[m]=a[i];m++;}
       else
           {c[n]=a[i];n++;}
    }
   for(i=0;i<m;i++)
   printf("%d  ",b[i]);
   for(i=0;i<n;i++)
   printf("%d  ",c[i]);
   printf("\n");
}
这是先排序,后分奇数偶数
2010-04-20 00:32
wxf8888
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2010-4-19
收藏
得分:0 
#include"stdio.h"
main()
{
   int m=0,n=0,i,j,t;
   int a[10];
   int b[10];
   int c[10];
   printf("Please input 10 numbers:");
   for(i=0;i<10;i++)
   scanf("%d",&a[i]);

   for(i=0;i<10;i++)
    {
       if(a[i]%2!=0)
           {b[m]=a[i];m++;}
       else
           {c[n]=a[i];n++;}
    }
   for(i=0;i<m;i++)
     for(j=0;j<m-1;j++)
      if(b[j]>b[j+1])
        {
           t=b[j];
           b[j]=b[j+1];
           b[j+1]=t;
        }
   for(i=0;i<n;i++)
     for(j=0;j<n-1;j++)
      if(c[j]>c[j+1])
        {
           t=c[j];
           c[j]=c[j+1];
           c[j+1]=t;
        }
   for(i=0;i<m;i++)
   printf("%d  ",b[i]);
   for(i=0;i<n;i++)
   printf("%d  ",c[i]);
   printf("\n");
}
这是先分奇数偶数 ,后排序
2010-04-20 00:33
wxf8888
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2010-4-19
收藏
得分:0 
回复 楼主 mikelr
图片附件: 游客没有浏览图片的权限,请 登录注册

这是运行结果图
2010-04-20 00:43
bobo2185355
Rank: 2
等 级:论坛游民
帖 子:81
专家分:43
注 册:2010-4-11
收藏
得分:1 
这有行
/* Note:Your choice is C IDE */
#include "stdio.h"
#define M 10
void min_max(int *pr,int n);
void main()
{  
   int ar[M];
   int even_number[M];
   int odd_number[M];
   int i;
   int j=0;
   int g=0;
 
    printf("enter number :");
    for(i=0;i<M;i++)
      scanf("%d",&ar[i]);
     
  min_max(ar,i);
      
       for(i=0;i<M;i++)
        {if(ar[i]%2!=0)
         {  even_number[j]=ar[i];
             j++;
         }  
        else
         { odd_number[g]=ar[i];
            g++;
         }   
       }
    for(i=0;i<j;i++)
    printf("%d ",even_number[i]);
    for(i=0;i<g;i++)
    printf("%d ",odd_number[i]);printf("\n");
   
}
 void min_max(int *pr,int n)
  {  int i;
       int t;
            
         for(i=0;i<M;i++)
       {
         for(n=0;n<M-1;n++)
          {
            if(pr[n]>pr[n+1])
             { t=pr[n];
              pr[n]=pr[n+1];
              pr[n+1]=t;
              }
           }  
       }
  
2010-04-20 15:38
bobo2185355
Rank: 2
等 级:论坛游民
帖 子:81
专家分:43
注 册:2010-4-11
收藏
得分:0 
新手请教下,如果想随意输入N个数据的话,按回车程序就能运行,那应该用哪个输入函数,或是在其他地方修改.难道还要用到malloc() ?  可能问题有点弱智 可是我真的不会
2010-04-20 15:57
mywaylgh
Rank: 8Rank: 8
来 自:厨房
等 级:蝙蝠侠
威 望:5
帖 子:188
专家分:729
注 册:2010-3-10
收藏
得分:1 
程序代码:
#include <stdio.h>
#include <stdlib.h>

int  comp( const  void  * p,  const  void  * q)
{
    int a = *( int * )p;
    int b = *( int * )q;
    if (a%2-b%2==0)
        return a-b;
    else
        return b%2-a%2;
}

int main()
{
    int a[10];//以10为例
    int i;
   
    printf("Input 10 numbers:");
    for (i=0;i<10 ;i++ )
        scanf("%d",a+i);

    qsort(a,10,sizeof(int),comp);

    for (int i=0;i<10 ;i++ )
        printf("%d ",a[i]);
    return 0;
}

收到的鲜花
  • 广陵绝唱2010-04-20 17:07 送鲜花  49朵   附言:好文章

人生就像茶几 上面放着许多杯具

人生也像厨房 里面总有一些洗具
2010-04-20 16:11
雨夜星光
Rank: 4
等 级:业余侠客
帖 子:66
专家分:230
注 册:2009-11-25
收藏
得分:0 
改进了一下。
#include<stdio.h>
#define M 100
main()
{
    int a[M],n,i,j,t;
    printf("你要输入几个数进行排序?\n");
    scanf("%d",&n);
    printf("请开始输入排序的数字:\n");
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);        
    }
    printf("排序中……\n");
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(a[i]>a[j])
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        }

    }
    for(i=0;i<n;i++)//输出基数
        if(a[i]%2==1)
        printf("%d  ",a[i]);
    for(i=0;i<n;i++)//输出偶数
        if(a[i]%2==0)
    printf("%d  ",a[i]);
    printf("\n");
}

C/C++交流群:65802335
2010-04-20 16:59
快速回复:关于排序的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018971 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved