Reputation: 232
I wrote the following code to bubble sort a character string. It's displaying garbage values.
main() {
int n, j, k;
char a[20], temp;
// statements to scan the number of items (n) and the string a[n].
for (j = 1; j < n; j++) {
for (k = 0; k < n - j; k++) {
if (a[k] >= a[k+1]) {
temp = a[k];
a[k] = a[k+1];
a[k+1] = a[k];
}
}
}
printf("The sorted items are: %s",a);
}
What may be the issue?
Upvotes: 1
Views: 10405
Reputation: 2432
In some of the old C compilers, you can't compare characters. A simple solution would be type-casting. As for your code,
main()
{
int n,j,k;
char a[20], temp;
//statements to scan the number of items (n) and the string a[n].
for(j=1; j<n; j++)
{
for(k=0; k<n-j; k++)
{
if((int)a[k]>=(int)a[k+1])
{
temp=a[k];
a[k]=a[k+1];
a[k+1]=temp;
}
}
}
printf("The sorted items are: %s",a);
}
Note that by type-casting, you're comparing the ASCII values of the characters.
Upvotes: 3
Reputation: 1784
You correctly made a temp-var for swapping the two elements, but forgot to use it! You want:
a[k+1] = temp;
Upvotes: 3