0

The following is a code for sorting numbers based on quicksort in C. To optimize for speed, scanf() has been replaced by fread(). But on printing the sorted list, all garbage values come out. The exact problem statement is on :http://www.codechef.com/problems/TSORT

#define SIZE 32768

#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b)
{
    return (*(unsigned long *)a-*(unsigned long *)b);
}

int main()
{
    char buffer[SIZE];
    register int readBytes=0;
    unsigned long bufferCounter=0, bufferedInput=0;

    unsigned long * array, t, i;

    scanf("%lu", &t); fflush(stdin);
    array=(unsigned long *) malloc(sizeof(long)*t);

    i=-1;

    while(readBytes=fread(buffer, sizeof(char), SIZE, stdin)>0)
    {
        for(bufferCounter=0; bufferCounter<readBytes; bufferCounter++)
        {
            if(buffer[bufferCounter]=='\n' || buffer[bufferCounter]==' ')
            {
                array[++i]=bufferedInput;
                bufferedInput=0;
            }
            else bufferedInput=bufferedInput*10+(buffer[bufferCounter]-'0');
        }
    }

    qsort(array, t, sizeof(long), compare);
    for(i=0; i<t; i++)
    {
        printf("%lu\n", array[i]);
    }
    return 0;
}

The code is compiled in Codeblocks and the input is piped from a file.

The input file is :

5 
5 
3  
6 
7  
1

The output obtained is:

5050160
5056368
1465662019
1868852841
1935438711

What is the problem with my code?

user257330
  • 63
  • 13
  • Use the debugger. What operator precedence does C have here? `readBytes=fread(buffer, sizeof(char), SIZE, stdin)>0` – usr Jun 22 '14 at 17:07
  • I have modified the code to include brackets '(readBytes=fread(buffer, sizeof(char), SIZE, stdin))>0'. But of no use. Still the same. – user257330 Jun 23 '14 at 06:04

0 Answers0