Search code examples
cbubble-sort

Bubble-sort in C


I am trying to program the Bubble sort sorting algorithm in C for practice and revision, however, I have come across a few issues: I am trying to print every swap after every iteration in the array of 20 random numbers, however, the program seems to get rid of items which are bigger than the item before for some reason.

Here is the code:

int i, j, temp;
int SortData[20]= {20, 43, 90, 17, 2, 4, 67, 54, 0, 44, 78, 89, 21, 45, 72, 
88, 65, 100, 97, 25};
for(i=0; i<20; i++)
{
    printf("|%d", SortData[i]);
}
printf("|");
printf("\n");

 for (i=0; i<19; i++)
    {
        for(j=0;j<18;j++){
        if(SortData[j]>SortData[j+1])
        {
            temp = SortData[j];
            SortData[j]=SortData[j+1];
            SortData[j+1]=temp;
            printf("|%d", SortData[j]);
        }

    }
    printf("\n");
    }
    printf("\n");
system("pause");
return 0;

And here is what happens when this code is ran:

|20|43|90|17|2|4|67|54|0|44|78|89|21|45|72|88|65|100|97|25|
|17|2|4|67|54|0|44|78|89|21|45|72|88|65|97
|17|2|4|54|0|44|21|45|72|88|65
|17|2|4|0|44|21|45|72|65
|2|4|0|21|45|65
|0|21|45|65
|0|21|65
|0|21
|0

Process returned 10 (0xA)   execution time : 3.072 s
Press any key to continue.

Moreover, I ran a few tests to check whether there was a bug in the sorting of the array or in the printing of it, here are the results from that test:

int i, j, temp;
int SortData[20]= {20, 43, 90, 17, 2, 4, 67, 54, 0, 44, 78, 89, 21, 45, 72, 
88, 65, 100, 97, 25};
for(i=0; i<20; i++)
{
    printf("|%d", SortData[i]);
}
printf("|");
printf("\n");

 for (i=0; i<19; i++)
    {
        for(j=0;j<18;j++){
        if(SortData[j]>SortData[j+1])
        {
            temp = SortData[j];
            SortData[j]=SortData[j+1];
            SortData[j+1]=temp;

        }

    }
    }
    for (i=0; i<20; i++){
        printf("|%d", SortData[i]);//Error here as 25 isn't sorted
    }
    printf("|");
    printf("\n");
system("pause");
return 0;

The only change in this snippet from the above one is that the printing statement comes out of the nested for loop and printed using a separate for loop, this kind of works, as the numbers are sorted, but fro some reason 25 isn't:

|20|43|90|17|2|4|67|54|0|44|78|89|21|45|72|88|65|100|97|25|
|0|2|4|17|20|21|43|44|45|54|65|67|72|78|88|89|90|97|100|25|
Press any key to continue . . .

So it turns out that there is an issue with the sorting and the printing. Could I please have some hints as to how print every iteration of the swap and get it to swap correctly?

UPDATE:

So I have incremented the loop counters by in the nested for loop and now it sorts out the array and shows every iteration. Here is what the changed code looks like:

int i, j, temp;
int SortData[20]= {20, 43, 90, 17, 2, 4, 67, 54, 0, 44, 78, 89, 21, 45, 72, 88, 65, 100, 97, 25};
for(i=0; i<20; i++)
{
    printf("|%d", SortData[i]);
}
printf("|");
printf("\n");

 for (i=0; i<20; i++)
    {
        for(j=0;j<19;j++){
        if(SortData[j]>SortData[j+1])
        {
            temp = SortData[j];
            SortData[j]=SortData[j+1];
            SortData[j+1]=temp;

        }
            printf("|%d", SortData[j]);//Changed code
    }
        printf("\n");
    }
    //for (i=0; i<20; i++){
      //  printf("|%d", SortData[i]);//Error here as 25 isn't sorted
    //}
    printf("|");
    printf("\n");
system("pause");
return 0;

Now it does show every iteration, and sorts it, but for some reason the number 100 disappears from the array and thus it only sorts 19 items rather than 20:

|20|43|90|17|2|4|67|54|0|44|78|89|21|45|72|88|65|100|97|25|
|20|43|17|2|4|67|54|0|44|78|89|21|45|72|88|65|90|97|25
|20|17|2|4|43|54|0|44|67|78|21|45|72|88|65|89|90|25|97
|17|2|4|20|43|0|44|54|67|21|45|72|78|65|88|89|25|90|97
|2|4|17|20|0|43|44|54|21|45|67|72|65|78|88|25|89|90|97
|2|4|17|0|20|43|44|21|45|54|67|65|72|78|25|88|89|90|97
|2|4|0|17|20|43|21|44|45|54|65|67|72|25|78|88|89|90|97
|2|0|4|17|20|21|43|44|45|54|65|67|25|72|78|88|89|90|97
|0|2|4|17|20|21|43|44|45|54|65|25|67|72|78|88|89|90|97
|0|2|4|17|20|21|43|44|45|54|25|65|67|72|78|88|89|90|97
|0|2|4|17|20|21|43|44|45|25|54|65|67|72|78|88|89|90|97
|0|2|4|17|20|21|43|44|25|45|54|65|67|72|78|88|89|90|97
|0|2|4|17|20|21|43|25|44|45|54|65|67|72|78|88|89|90|97
|0|2|4|17|20|21|25|43|44|45|54|65|67|72|78|88|89|90|97
|0|2|4|17|20|21|25|43|44|45|54|65|67|72|78|88|89|90|97
|0|2|4|17|20|21|25|43|44|45|54|65|67|72|78|88|89|90|97
|0|2|4|17|20|21|25|43|44|45|54|65|67|72|78|88|89|90|97
|0|2|4|17|20|21|25|43|44|45|54|65|67|72|78|88|89|90|97
|0|2|4|17|20|21|25|43|44|45|54|65|67|72|78|88|89|90|97
|0|2|4|17|20|21|25|43|44|45|54|65|67|72|78|88|89|90|97
|0|2|4|17|20|21|25|43|44|45|54|65|67|72|78|88|89|90|97
|

Press any key to continue . . .

Why does 100 disappear?


Solution

  • This works perfectly, you did a little error:

    int i, j, temp;
    int SortData[20]= {20, 43, 90, 17, 2, 4, 67, 54, 0, 44, 78, 89, 21, 45, 72, 88, 65, 100, 97, 25};
    for(i=0; i<20; i++)
    {
        printf("|%d", SortData[i]);
    }
    printf("|");
    printf("\n");
    //before for(i=0; i<19; i++)
    for (i=0; i<20; i++)// i < 20 or it will skip the last number
    {
        //before for(j=0; j<18; j++)
        for(j=0;j<19;j++){
            if(SortData[j]>SortData[j+1])
            {
            temp = SortData[j];
            SortData[j]=SortData[j+1];
            SortData[j+1]=temp;
            }
    
        }
    }
    for (i=0; i<20; i++){
        printf("|%d", SortData[i]);
    }
    printf("|");
    printf("\n");
    return 0;
    

    If you want to print every iteration of the bubble sorting, this is the code:

    int i, j, temp, h;
    int SortData[20]= {20, 43, 90, 17, 2, 4, 67, 54, 0, 44, 78, 89, 21, 45, 72, 88, 65, 100, 97, 25};
    for(i=0; i<20; i++)
    {
        printf("|%d", SortData[i]);
    }
    printf("|");
    printf("\n");
    
    for (i=0; i<20; i++)
    {
        for(j=0;j<19;j++){
            if(SortData[j]>SortData[j+1])
            {
                temp = SortData[j];
                SortData[j]=SortData[j+1];
                SortData[j+1]=temp;
                for (h=0; h<20; h++)
                {
                    printf("|%d", SortData[h]);
                }
                printf("|");
                printf("\n");
            }
        }
    }
    return 0;
    }