为什么我的程序按升序对数组进行排序会产生垃圾值?

时间:2016-07-16 10:29:18

标签: c

#include<stdio.h>
void swa(int *, int *);
int main()
{
    int i,j,arr[10];
    arr[10]= (10,20,30,40,50);
    printf("ascending order");
    for(i=0;i<5;i++)
    {
        for(j=i+1;j<5;j++)
        {
            if (arr[i]<arr[j]);
            swa(&arr[i],&arr[j]);
        }
    }
        for(i=0;i<5;i++)
        {
            printf("%d",arr[i]);
        }
        return 0;
}
void swa(int *x,int *y)
{
    int t;
    t=*x;
    *x=*y;
    *y=t;
}

此代码在输出中提供垃圾值。如何使用函数说swa进行交换?

来修改此程序

3 个答案:

答案 0 :(得分:3)

您的代码非常接近,但您犯了三个错误:

  • 使用逗号表达式
  • 初始化数组
  • 您在s
  • 之后添加了分号
  • 您正在以错误的方向交换(您的数组将按降序排序) - 即if应为if (arr[i]<arr[j])

修复这三个错误将产生一个有效的解决方案。初始化需要作为声明的一部分发生,并使用花括号:

if (arr[i]>arr[j])

Demo.

答案 1 :(得分:0)

  1. 在错误的地方初始化数组。
  2. 排序不正确
  3. if语句阻止交换之后
  4. 分号。
  5. 将其更改为:

        int i,j,arr[10]= {10,20,30,40,50};
    
            printf("ascending order");
    
            for(i=0;i<5;i++)
            {
                for(j=i;j<(5-i-1);j++)
                {
                    if (arr[j]>arr[j+1])
                    swa(&arr[j],&arr[j+1]);
                }
            }
            for(i=0;i<5;i++)
            {
                printf("%d ",arr[i]);
            }
    

答案 2 :(得分:0)

使用支撑列表声明数组时,可以初始化数组。

因此尝试初始化数组

int i,j,arr[10];
arr[10]= (10,20,30,40,50);

无效。事实上,在右侧的第二个语句中,使用了逗号运算符,并且索引为10的数组中不存在的元素被赋值为50。

这个if语句

if (arr[i]<arr[j]);
                  ^^
由于分号放置错误,

有一个空的子语句。它必须被删除。

此外,if语句中的条件表示您正在尝试按降序排序数组而不是升序。

使用魔术数字也是一种糟糕的编程风格,例如程序中的数字5。

程序可以按以下方式查看

#include <stdio.h>

void swap( int *x, int *y )
{
    int tmp = *x;
    *x = *y;
    *y = tmp;
}

#define N   10

int main(void) 
{

    int arr[N] = { 10, 20, 30, 40, 50 };
    size_t i, j;

    size_t n = 0;
    while ( n < N && arr[n] != 0 ) ++n;

    printf( "descending order:" );

    for ( i = 0; i < n; i++ )
    {
        for ( j = i + 1; j < n; j++ )
        {
            if ( arr[i] < arr[j] ) swap( &arr[i], &arr[j] );
        }
    }

    for ( i = 0; i < n; i++ ) printf( " %d", arr[i] );
    printf( "\n" );

    return 0;
}

它的输出是

descending order: 50 40 30 20 10