黑马程序员技术交流社区

标题: 如何用冒泡法对多个变量进行从大到小的排序 [打印本页]

作者: 云霄之上    时间: 2014-7-14 17:34
标题: 如何用冒泡法对多个变量进行从大到小的排序
比如我定义四个变量 int a,b,c,d; 请用冒泡法进行排序 ,我想到可以用数组 ,但是数组赋值的时候不能通过变量啊  求解!!

作者: Moebius    时间: 2014-7-14 17:40
你开始定义的是变量,不是数组,你先声明一个数组,然后向里面传入数据,在进行遍历就好。
作者: 云霄之上    时间: 2014-7-14 18:14
Moebius 发表于 2014-7-14 17:40
你开始定义的是变量,不是数组,你先声明一个数组,然后向里面传入数据,在进行遍历就好。 ...

不行啊 可能我说的不清楚  我的方法里面我定义数组了 ,但是就算编译没有出错  但是结果却是千差万别啊  而且数组赋值的时候不能通过变量来进行赋值啊

作者: Moebius    时间: 2014-7-14 18:33
#include <stdio.h>

int main()
{
    int a[4];
    printf("请输入四个整数\n");
    //scanf("%d %d %d %d",a[0],a[1],a[2],a[3]);
    for (int i=0; i<4; i++)
    {
        scanf("%d",&a[i]);
    }
   
    int max = 0;
   
    for (int i=0; i<3; i++)
    {
        for (int j=0; j<3-i; j++) {
            if (a[j]<a[j+1]) {
                max = a[j+1];
                a[j+1] = a[j];
                a[j] = max;
            }
        }
      
    }
    for (int i=0; i<4; i++)
    {
        printf("%d,",a[i]);
    }
    printf("\n");
    return 0;
}


你看看我这代码你能不能运行,在看看自己点跟我这有什么区别
作者: yingzhuo1314    时间: 2014-7-14 20:38
  1. #include <stdio.h>
  2. void main()
  3. {
  4.         int a[4];
  5.         int i,j,flag,temp;
  6.         printf("请输入数据:");
  7.         for(i=0;i<4;i++)
  8.                 scanf("%d,",&a[i]);
  9.         for(i=3;i>0;--i)
  10.         {
  11.                 flag=0;//变量flag用来标记本趟排序是否发生了变化
  12.                 for(j=1;j<=i;++j)
  13.                         if(a[j-1]>a[j])
  14.                         {
  15.                                 temp=a[j];
  16.                                 a[j]=a[j-1];
  17.                                 a[j-1]=temp;
  18.                                 flag=1;//如果没发生变换flag值为0,发生交换则改为1
  19.                         }
  20.                         if(flag==0)  //一趟排序过程中没有发生元素交换,则证明序列有序,排序结束
  21.                                 break;
  22.         }
  23.         printf("排序后的结果:");
  24.         for(i=0;i<4;++i)
  25.         printf("%d,",a[i]);
  26.         printf("\n");
  27. }
复制代码

作者: 云霄之上    时间: 2014-7-14 22:15
这样的方法我也知道  我可能没有说清出  我需要的是如果这四个变量的值 是我通过在程序中计算的出来的结果呢  ? 也就是说不需要我用SCANF函数输入的  那有什么办法 能让我把这四个变量的值在不清出多少的情况下  弄进数组呢?

作者: Moebius    时间: 2014-7-14 22:18
云霄之上 发表于 2014-7-14 22:15
这样的方法我也知道  我可能没有说清出  我需要的是如果这四个变量的值 是我通过在程序中计算的出来的结果 ...

直接赋值不就可以了。你把你代码贴出来看看
作者: caopengxu    时间: 2014-7-14 22:37
我想到的是利用指针,不用数组,楼主考虑考虑这个思路吧。时间紧迫,就不提供代码了,嘿嘿。
作者: 云霄之上    时间: 2014-7-14 23:29
include <stdio.h>
include<string.h>
int main
{
  printf(“请输入字符串”);
  char words[100];
  scanf(“%s”,words)
  int i;
  int a=0 ;
  int b =0;
  int c=0;
  int d=0;
  for(i=0,i<strlen(words[]);i++)
  {if words[i]=‘A’
    a++;
    else if words[i]= ‘B’
    b++;
    else if words[i]=’C’
    c++;
    else if words[i]=’D’
    d++;
  }
int rank[]={a,b,c,d};
int i;
int j;
int k;
for(i=0;i<4;i++)
{for(j=i+1;j<4;j++)
  {if rank[i]<rank[j]
    {rank[i]=k;
    rank[i]=rank[j];
    rank[j]=k}
    }
  }
for(i=0,i<4;i++)
printf(“%d”, rank[i]);
return 0;
作者: 云霄之上    时间: 2014-7-14 23:30
这个不是我调试过的代码 是我在WIN7上写的   我调试好的在 mac上输出的结果  看不懂





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2