We help IT Professionals succeed at work.

# Sorting program

on
Medium Priority
271 Views
hi,

I have a sort program like below. there is no compiler error but it has some error. could you please help me correct it. thanks

---------------code --------------------------------------
#include <stdio.h>
#define maximum 4

void bubblesort(int a[], int n);
main()
{

int a[maximum];
int j;
int x;
int CNT=0;

scanf("%d", &x);
while (x !=-1 && CNT < maximum){
a[CNT++]=x;
printf("(b) enter number: ");
scanf("%d", &x);

if (CNT==maximum)
printf("(c) overflow\n");
else{
printf("(d) extra: ");
scanf("%d", &x);
}
}

printf("(e) unslo list: " );
for (j=0; j < CNT; j++)
printf("%d, %d\n", j, a[j]);

if (CNT >0)

printf("(f) sorted: \n");
bubblesort (a, CNT);
for (j=0; j< CNT; j++)
printf("%d, %d", j, a[j]);

system("pause");
}

void bubblesort(int a[], int n)
{
int i, j, tmp;

for (i=0; i<n-1; i++)
{
for (j=0; j<n-1-i; j++)
if (a[j+1] < a[j])     /* compare the two neighbors */
{
tmp = a[j];        /* swap a[j] and a[j+1]      */
a[j] = a[j+1];
a[j+1] = tmp;
}

}

}
Comment
Watch Question

## View Solutions Only

CERTIFIED EXPERT
Top Expert 2012

Commented:
Two problems here:

main()
{

int a[maximum];
int j;
int x;
int CNT=0;

scanf("%d", &x);
while (x !=-1 && CNT < maximum){
a[CNT++]=x;
printf("(b) enter number: ");
scanf("%d", &x);

if (CNT>=maximum) //  <--------- also for all values > maximum
printf("(c) overflow\n");
else{
printf("(d) extra: ");
scanf("%d", &x);
}
}

printf("(e) unslo list: " );
for (j=0; j < CNT; j++)
printf("%d, %d\n", j, a[j]);

if (CNT >0) { // <---------- need brackets here, or the 'if' will only be conditional for 'printf()'

printf("(f) sorted: \n");
bubblesort (a, CNT);
for (j=0; j< CNT; j++)
printf("%d, %d", j, a[j]);

system("pause");
} // <--- closing bracket also
}

Commented:
hi, thanks

I following your instruction and change the code like below. but the the output seems not correct. it not really sorts the input numbers

#include <stdio.h>
#define maximum 4

void bubblesort(int a[], int n);
main()
{

int a[maximum];
int j;
int x;
int CNT=0;

scanf("%d", &x);
while (x !=-1 && CNT < maximum){
a[CNT++]=x;
printf("(b) enter number: ");
scanf("%d", &x);

if (CNT>=maximum) //  <--------- also for all values > maximum
printf("(c) overflow\n");
else{
printf("(d) extra: ");
scanf("%d", &x);
}
}

printf("(e) unslo list: " );
for (j=0; j < CNT; j++)
printf("%d, %d\n", j, a[j]);

if (CNT >0) { // <---------- need brackets here, or the 'if' will only be conditional for 'printf()'

printf("(f) sorted: \n");
bubblesort (a, CNT);
for (j=0; j< CNT; j++)
printf("%d, %d", j, a[j]);

system("pause");
} // <--- closing bracket also
}

void bubblesort(int a[], int n)
{
int i, j, tmp;

for (i=0; i<n-1; i++)
{
for (j=0; j<n-1-i; j++)
if (a[j+1] < a[j])     /* compare the two neighbors */
{
tmp = a[j];        /* swap a[j] and a[j+1]      */
a[j] = a[j+1];
a[j+1] = tmp;
}

}

}
CERTIFIED EXPERT
Top Expert 2012

Commented:
The more I look at your code the stranger the input sequence gets. Did you mean to

#include <stdio.h>
#define maximum 4

void bubblesort(int a[], int n);
main()
{

int a[maximum];
int j;
int x;
int CNT=0;

while (x !=-1 && CNT < maximum){
printf("(b) enter number: ");
scanf("%d", &x);
a[CNT++]=x;

}

printf("(e) unslo list: \n" );
for (j=0; j < CNT; j++)
printf("%d, %d\n", j, a[j]);

if (CNT >0) { // <---------- need brackets here, or the 'if' will only be conditional for 'printf()'

printf("(f) sorted: \n");
bubblesort (a, CNT);
for (j=0; j< CNT; j++)
printf("%d, %d\n", j, a[j]);

system("pause");
} // <--- closing bracket also
}

void bubblesort(int a[], int n)
{
int i, j, tmp;

for (i=0; i<n-1; i++)
{
for (j=0; j<n-1-i; j++)
if (a[j+1] < a[j])     /* compare the two neighbors */
{
tmp = a[j];        /* swap a[j] and a[j+1]      */
a[j] = a[j+1];
a[j+1] = tmp;
}

}

}

?

Commented:
thanks, I know it looks strange....I am kind confused....

but, I guess my teacher need some thing can return "overflow" if user's input excess array size , because  the original code was roughly copied from the class (there are some error, but the idea is like that)
if (CNT>=maximum) //  <--------- also for all values > maximum
printf("(c) overflow\n");

I actually did the same thing like you give to me, but looks like my teach did not like it...><

CERTIFIED EXPERT
Top Expert 2012

Commented:
>>but, I guess my teacher need some thing can return "overflow" if user's input excess array size

You aren't taking any input regarding the array size in your code.

>>If I recall correct this is call "variable link list"

Err, no, that's something completely different.
General Manager

Commented:
Hi,

Try to change as following:

do{
scanf("%d", &x);

if (CNT>=maximum) //  <--------- also for all values > maximum
printf("(c) overflow\n");

}while(x>=maximum || x<0);

while (x !=-1 && CNT < maximum){
a[CNT++]=x;
printf("(b) enter number: ");
scanf("%d", &x);
.... // the rest of ur code will be the same
}

Commented:

hi, tang_tzuchi

could you give me the complete code for the main() function.  thanks.
CERTIFIED EXPERT
Top Expert 2012
Commented:
It is not really effective to check that while already exevuting teh loop, rather make sure that teh range is valid when inputting the value:

main()
{

int a[maximum];
int j;
int x;
int CNT=0;
int max = maximum + 1;

while (max > maximum) { // repeats until input is below maximum
printf("(a)please enter number (max. is %d):", maximum);
scanf("%d", &max);
}

while (x !=-1 && CNT < max){
printf("(b) enter number: ");
scanf("%d", &x);
a[CNT++]=x;

}

printf("(e) unslo list: \n" );
for (j=0; j < CNT; j++)
printf("%d, %d\n", j, a[j]);

if (CNT >0) { // <---------- need brackets here, or the 'if' will only be conditional for 'printf()'

printf("(f) sorted: \n");
bubblesort (a, CNT);
for (j=0; j< CNT; j++)
printf("%d, %d\n", j, a[j]);

system("pause");
} // <--- closing bracket also
}

Not the solution you were looking for? Getting a personalized solution is easy.

General Manager
Commented:
#include <stdio.h>
#define maximum 4

void bubblesort(int a[], int n);
main()
{

int a[maximum];
int j;
int x;
int CNT=0;

do{
scanf("%d", &x);

if (CNT>=maximum) //  <--------- also for all values > maximum
printf("(c) overflow\n");

}while(x>=maximum || x<0);

while (x !=-1 && CNT < maximum){
a[CNT++]=x;
printf("(b) enter number: ");
scanf("%d", &x);
}

printf("(e) unslo list: \n" );
for (j=0; j < CNT; j++)
printf("%d, %d\n", j, a[j]);

if (CNT >0) { // <---------- need brackets here, or the 'if' will only be conditional for 'printf()'

printf("(f) sorted: \n");
bubblesort (a, CNT);
for (j=0; j< CNT; j++)
printf("%d, %d\n", j, a[j]);

system("pause");
} // <--- closing bracket also
}

void bubblesort(int a[], int n)
{
int i, j, tmp;

for (i=0; i<n-1; i++)
{
for (j=0; j<n-1-i; j++)
if (a[j+1] < a[j])     /* compare the two neighbors */
{
tmp = a[j];        /* swap a[j] and a[j+1]      */
a[j] = a[j+1];
a[j+1] = tmp;
}

}

}
##### Thanks for using Experts Exchange.

• View three pieces of content (articles, solutions, posts, and videos)
• Ask the experts questions (counted toward content limit)
• Customize your dashboard and profile