标题:冒泡排序,顺序插入的问题
只看楼主
张大勇
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-4-4
 问题点数:0 回复次数:2 
冒泡排序,顺序插入的问题
定义两个数组score[11],age[11],先存放10个学生成绩,年龄。然后用冒泡排序法将成绩由大到小,年龄由小到大排序。然后按顺序插入一个学生成和年龄。排序没问题,但插入时有问题。这时我前几天在论坛里看到的,但找不到了,现在重新提出一下




#include<stdio.h>  
void main()  
{  
int score[11],age[11];  
int i,j,x,y,temp;  
printf("请输入10个学生的成绩和年龄:\n");  
for(i=0;i<10;i++)  
{  
printf("请输入第%d个学生的成绩和年龄:",i+1);  
scanf("%d%d",&score[i],&age[i]);  
}  
for(i=0;i<10;i++)  
{  
  for(j=i+1;j<10;j++)  
  {  
    if(score[i]<score[j])  
     {  
       temp=score[i];  
       score[i]=score[j];  
       score[j]=temp;  
     }  
   if(age[i]>age[j])
    {  
     temp=age[i];  
     age[i]=age[j];  
     age[j]=temp;  
    }  
  }  
}  
printf("学生成绩从高到低如下:\n");  
for(i=0;i<10;i++)  
   printf("%4d",score[i]);  
printf("\n");  
printf("学生年龄从小到大如下:\n");  
for(i=0;i<10;i++)  
   printf("%4d",age[i]);  
printf("\n");  
printf("请输入要插入的学生成绩和年龄:");  
scanf("%d%d",&x,&y);  
for(i=0;i<10;i++)  
{  
   if(score[i]<x)      
   {
      for(j=10;j>i;j--)  
      {
         score[j]=score[j-1];
      }
      break;
   }      
}
score[i-1]=x;  
for(i=0;i<10;i++)  
{  
   if(age[i]>y)  
   {  
     for(j=10;j>i;j--)  
     {
           score[j]=score[j-1];
     }  
     break;
   }
}  
age[i]=y;  
printf("\n学生成绩从高到低如下:\n");  
for(i=0;i<11;i++)  
    printf("%4d",score[i]);  
printf("\n学生年龄从小到大如下:\n");  
for(i=0;i<11;i++)  
    printf("%4d",age[i]);  
printf("\n");  
}
搜索更多相关主题的帖子: 顺序 score 冒泡 年龄 
2008-04-26 12:07
张大勇
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-4-4
得分:0 
怎么没有理呢
2008-04-26 17:48
Sun_DN
Rank: 1
来 自:NEU
等 级:新手上路
帖 子:48
专家分:0
注 册:2006-4-5
得分:0 
改了一下,调试通过
#include<stdio.h>  
#include<stdlib.h>
int main()  
{  
   int score[11],age[11];  
   int i,j,x,y,temp;  
//输入10个学生的成绩和年龄   
   printf("请输入10个学生的成绩和年龄:\n");  
   for(i=0;i<10;i++)  
   {  
      printf("请输入第%d个学生的成绩和年龄:",i+1);  
      scanf("%d%d",&score[i],&age[i]);  
   }  
   
   for(i=0;i<10;i++)  
   {  
      for(j=i+1;j<10;j++)  
      {  
         if(score[i]<score[j])  //对成绩排序,从大到小
         {  
            temp=score[i];  
            score[i]=score[j];  
            score[j]=temp;  
         }  
         if(age[i]>age[j])      //对年龄排序,从小到大
         {  
            temp=age[i];  
            age[i]=age[j];  
            age[j]=temp;  
         }  
      }  
   }  
//输出排序结果
   printf("学生成绩从高到低如下:\n");  
   for(i=0;i<10;i++)  
      printf("%4d",score[i]);  
   printf("\n");  
   printf("学生年龄从小到大如下:\n");  
   for(i=0;i<10;i++)  
      printf("%4d",age[i]);  
   printf("\n");  
//插入
   printf("请输入要插入的学生成绩和年龄:");  
   scanf("%d%d",&x,&y);  
   for(i=0;i<10;i++)  
   {  
      if(score[i]<x)      
      {
       for(j=10;j>i;j--)  
       {
         score[j]=score[j-1];  //整体后移  
       }
       score[i]=x;             //插入x
       break;                  //退出排序
      }      
   }
   if(i==10)                   //若不加此条件,可能会重复插入
      score[10]=x;             //插入为最小,放在最后
      
   for(i=0;i<10;i++)  
   {  
      if(age[i]>y)  
      {  
         for(j=10;j>i;j--)  
         {
           age[j]=age[j-1];
         }
         age[i]=y;
         break;
     }
   }
   if(i==10)
      age[i]=y;  
//输出插入后重新排序结果      
   printf("\n学生成绩从高到低如下:\n");  
   for(i=0;i<11;i++)  
      printf("%4d",score[i]);  
   printf("\n学生年龄从小到大如下:\n");   
   for(i=0;i<11;i++)  
      printf("%4d",age[i]);  
   printf("\n");  

   system("pause");
   return 0;
}

人不己知,而不愠,不亦君子乎?
2008-04-26 19:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-211201-1-1.html




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

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