I am doing an bubble sort assignment, the goal is to enter up to a max of 10 numbers and sort them. The problem that I am running into is when I run the code, I have to hit ^D to have the next line of the array displayed and I am getting a negative number sometimes displayed which is not one of the numbers I entered. Basically what I am asking is there something wrong with my main method as I believe my sort method is correct. Thanks in advance.

#include <stdio.h>
#define MAXIMUM 10

void sort(int a[], int n)
{
        int j, jj;
        int t;

        for(j=0; j<(n-1); j++) /* outer loops and counts passes */
        {       for(jj=0; jj< (n-(1-j)); jj++) /* inner loop and compares adjenct items */
                {       if (a[jj] > a[jj+1]) /* out of order */
                                {
                                t= a[jj];
                                a[jj] = a[jj+1];
                                a[jj + 1] = t;
                                }
                }
        }
}
int main()
{
        int a[MAXIMUM];
        int j; /* loops */
        int x; /* get data */
        int cnt = 0; /* actually count */

        printf("enter number or -1 to quit");

        scanf(" %d" , &x); /* into x */
        while( x != -1 && cnt < MAXIMUM)
                {
                        a[cnt++] = x; /* put data into array */
        printf("enter number or -1 to quit");
        scanf("%d",&x);
                } 
        printf("number of items entered %d \n", cnt);

        for (j=0; j < cnt; j++)

        {
            printf("%d %d\n",j, a[j]);
        }

        if (cnt > 0)

        {
                sort(a, cnt);

                printf("sorted list \n");
        }

        for (j =0; j < cnt; j++)
                {
                printf("%d %d\n", j, a[j]);

        if (cnt = MAXIMUM)
                printf("full-overflow\n");

        else printf("enter a number or -1 to quit");
                scanf("%d", &x);
        }
}

Two things I see: for(jj=0; jj< (n-(1-j)); jj++) /* inner loop and compares adjenct items */ I don't believe jj< (n-(1-j)); is doing what you want. Try calculating values of jj using various values of j.


Are you assigning or comparing cnt in this IF statement?

if (cnt = MAXIMUM)
                printf("full-overflow\n");

Also, please use better formatting. Your indentation is very inconsistent making the program a little hard to follow.

I am comparing cnt in that if statement.
I tried flipping the j and n

for(jj=0; jj< (j-(1-n)); jj++)

and here is the output I get.

enter number or -1 to quit56
enter number or -1 to quit7
enter number or -1 to quit5
enter number or -1 to quit6
enter number or -1 to quit9
enter number or -1 to quit56
enter number or -1 to quit44
enter number or -1 to quit23
enter number or -1 to quit85
enter number or -1 to quit65
enter number or -1 to quit45
number of items entered 10
0 56
1 7
2 5
3 6
4 9
5 56
6 44
7 23
8 85
9 65
sorted list
0 5
full-overflow
1 6
full-overflow
2 7
full-overflow
3 9
full-overflow
4 1
full-overflow
5 23
full-overflow
6 -4195980
full-overflow
7 44
full-overflow
8 -4195972
full-overflow
9 56
full-overflow

Edited 5 Years Ago by zychos: added output

One = char is for assignment in C. Two == char's are used for comparisons.

if(variable == someValue);

This is the pseudo code for a nested loop version of bubble sort:

procedure bubbleSort( A : list of sortable items )
  n = length(A)
  for (i = 0; i < n; i++)
     /* back through the area bringing smallest remaining element to position i */
     for (j = n-1; j > i; j--)
        if A[j-1] > A[j] then
           swap(A[j-1], A[j])
        end if
     end for
  end for
end procedure

Straight from Wikipedia, which has a whole page on it, and links to many more references, versions, etc.

Edited 5 Years Ago by Adak: n/a

This question has already been answered. Start a new discussion instead.