注册 登录
编程论坛 C++教室

关于排序问题

a99875984 发布于 2012-04-16 23:21, 251 次点击
程序代码:
#include <iostream.h>
#include <iomanip.h>
#include <stdio.h>
int main()
{
    int a[3],i,j;
    for(i=0;i<3;i++)
        cin>>a[i];
    for(i=0;i<3;i++)
        if(a[i+1]<a[i])
    {
   
        j=a[i];
        a[i]=a[i+1];
        a[i+1]=j;
    }
    for(i=0;i<3;i++)
        cout<<setw(3)<<a[i];
    return 0;
}请问,问什么输入3 2 1.输出是2 1 3
输入2 1 3时,输出是1 2 3?这是什么情况啊?谢谢了哈
4 回复
#2
ab10349827492012-04-17 00:23
首先可以看出你用的是冒泡排序法,既然是冒泡排序法就应该在排序时使用两个循环语句,但是由于你只使用了一个循环语句,导致你只是把最大的数放到了最底下,而其它的则是无序的,所以说当你输入321时由于3最大所以沉到了最低下(就是放在最后),而当你输入213时由于2没有3大所以沉到了倒数第二位,所以说只要把你的循环语句修改一下,首先应该再定义一个变量int k.修改代码如下:
for(i=0:i<2:i++)
    for(k=0:k<2-i:k++)
        if(a[k+1]<a[k])
          { j=a[k+1]:
            a[k+1]=a[k]:
            a[k]=j;
          }
#3
a998759842012-04-17 13:33
回复 2楼 ab1034982749
谢谢了,把这点给忘了。
我同学帮我改了下,结果当时一重循环就解决了,后来我问他,结果他说他也是乱改的,当时没注意是一重循环,请问下一重循环怎么解决排序问题啊?

[ 本帖最后由 a99875984 于 2012-4-17 13:49 编辑 ]
#4
ab10349827492012-04-17 18:10
一重循环好像不能够排序一组数,
不过可以选出一组数中的最大值和最小值,
所以还得用二重循环。
其中有冒泡排序和选择排序这两种常用。
#5
lyswwr2012-04-17 20:45
同意二楼的
#include <iostream.h>
int main()
{
    int i,j,a[3]={3,2,1};
    //for(i=1;i<=3;i++)
     //   cin>>a[i];
        for(i=0;i<3;i++)
            for(j=0;j<2;j++)
            if(a[j+1]<a[j])
            {
            int temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
    for(i=0;i<3;i++)
        cout<<a[i];
    return 0;
}
1