冒泡排序错误。输入错误

时间:2012-11-14 08:29:14

标签: c sorting

我有以下来源,当我执行它时,值会改变它们的符号。我无法找出出错的地方。任何建议都有帮助

代码

#include <stdio.h>
#include <stdlib.h>
int arrsort(int *arr, int size);
int display(int *arr, int size);

int main()
{
    int s_o_1=0, s_o_2=0;
    int i; //index for arrays
    int a[s_o_1],b[s_o_2];


    printf("enter the size of the first array\n");
    scanf("%d",&s_o_1);

    printf("Enter the values of the first array\n");
    for (i=0;i<s_o_1;i++)
    {
        scanf("%d",&a[i]);
    }

    printf("enter the size of the second array\n");
    scanf("%d",&s_o_2);

    printf("Enter the values of the second array\n");
    for (i=0;i<s_o_2;i++)
    {
        scanf("%d",&b[i]);
    }

    //sort the first array

    arrsort(a,s_o_1);
    printf("The sorted first array is\n");
    display(a,s_o_1);

    //sort the second array

    arrsort(b,s_o_2);
    printf("The sorted second array is\n");
    display(b,s_o_2);

}

int arrsort(int *arr, int size)
{
    int temp; //for holding the temp value
    int i; //for indexing
    int j;

    for(j=0;j<size;j++)
    {
        for(i=0;i<size;i++)
        {
            if(arr[i]>arr[i+1])
            {
            temp=arr[i];
            arr[i]=arr[i+1];
            arr[i+1]=temp;
            }
        }   
    }
}



int display(int *arr, int size)
{
    int i; //array index
    for (i=0;i<size;i++)
    {
        printf("%d\t",i);

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

输出

enter the size of the first array
5
Enter the values of the first array
1 5 -10 -15 3
enter the size of the second array
5
Enter the values of the second array
-3 -5 15 9 10
The sorted first array is
0   1   2   3   4   
-15 -10 3   5   10  
The sorted second array is
0   1   2   3   4   
-15 -10 -5  -3  9   

3 个答案:

答案 0 :(得分:2)

问题是数组声明:

int s_o_1=0, s_o_2=0;
int i; //index for arrays
int a[s_o_1],b[s_o_2];

数组可能以大小为0声明。要么以适当的最大大小声明,要么在读取数组的大小后声明。

答案 1 :(得分:1)

您的代码有未定义的行为。在这一行:

int a[s_o_1],b[s_o_2];

它声明零大小的数组。稍后获取s_o_1和s_o_2的值时,数组大小不会更改。所以你所有的阅读和阅读写导致未定义的行为。

C标准要求数组的长度应为非零。

答案 2 :(得分:1)

保留记忆的方式不正确int a[s_o_1],b[s_o_2];

您必须在int *a, *b;之后使用scanf("%d",&s_o_1);,然后才需要执行a = (int*)malloc(sizeof(int)*s_o_1);之类的操作 为b分配内存也是如此。

冒泡排序alghorithm也应该像bellow

 for(j=0;j<size - 1;j++)
    {
        for(i=j + 1;i<size;i++)
        {
            if(arr[i]>arr[j])
            {
            temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
            }
        }   
    }