Search code examples
csortingbubble-sort

Trouble with extra zero in bubble sort in C


I am trying to sort, say, 10 integers in ascending order using bubble sort in C.

This is the code I am using:

#include<stdio.h>
void main()
{
int x[20],i,j;
float temp;
printf("Enter 10 values: \n");
for(i=0;i<10;i++)
{
    printf("x[%d]: ",i+1);
    scanf("%d",&x[i]);
}
for(i=0;i<10-1;i++)
{
    for(j=0;j<=10-i-1;j++)
    {
        if(x[j]>x[j+1])
        {
            temp=x[j];
            x[j]=x[j+1];
            x[j+1]=temp;
        }
    }
}
printf("The sorted list in ascending order is \n");
for(i=0;i<10;i++)
{
    printf("%5d",x[i]);
}
}

The problem is that I am getting an extra zero as output despite giving only non-zero entries as my 10 integers.

This is the input and the corresponding output I am getting. Note that the second output gives a zero and the value 19 has disappeared from the sorted list:

Enter 10 values:
x[1]: 4
x[2]: 2
x[3]: 7
x[4]: 4
x[5]: 8
x[6]: 2
x[7]: 3
x[8]: 9
x[9]: 13
x[10]: 19
The sorted list in ascending order is
2    0    2    3    4    4    7    8    9   13   
--------------------------------
Process exited after 44.89 seconds with return value 5
Press any key to continue . . .

I am unable to locate my precise mistake.


Solution

  • for(i=0;i<10-1;i++)
    {
        for(j=0;j<10-i-1;j++)
        {
            if(x[j]>x[j+1])
            {
                temp=x[j];
                x[j]=x[j+1];
                x[j+1]=temp;
            }
        }
    }
    

    the bug is when i = 0 then inner loop condition is j<=10-0-1=9, then you compare a[j] and a[j+1], but a[j+1] could be a[10], the array starts from 0 to 19, and you only initialized the first 10 integers(0-9), the left 10 integers(10-19) is 0, so there will be an extra 0 in your result.

    change j<=10-i-1 to j<10-i-1, and the code will run as you expect.