Native/C
147page
aucd29
2013. 10. 2. 18:50
#include <stdio.h>
#include <string.h>
#define MAXLINES 5000
#define MAXLEN 1000
char *lineptr[MAXLINES];
int readlines(char *[], int);
void writelines(char *[],int);
void qsort(char *[],int, int);
int getline(char *, int);
char *alloc(int);
void main(void)
{
int nlines;
if((nlines = readlines(lineptr, MAXLINES)) >= 0)
{
qsort(lineptr, 0, nlines-1);
writelines(lineptr,nlines);
return 0;
}
else
{
printf("error: input too big to sort\n");
return 1;
}
}
int readlines(char *lineptr[], int maxlines)
{
int len, nlines;
char *p, line[MAXLEN];
nlines = 0;
while((len = getlines(line, MAXLEN)) > 0)
if(nlines >= maxlines || (p = alloc(len)) == NULL)
return -1;
else
{
line[len-1] = '\0';
strcpy(p, line);
lineptr[nlines++] = p;
}
return nlines;
}
void writelines(char *lineptr[], int nlines)
{
while(nlines-- > 0)
printf("%s\n", *lineptr++);
}
void qsort(char *v[], int left, int right)
{
int i, last;
if(left >= right)
{
return;
}
swap(v, left, (left + right) / 2);
last = left;
for(i=left;i<=right;++i)
if(strcmp(v[i], v[left]) < 0)
swap(v, ++last, i);
swap(v, left, last);
qsort(v, left, last - 1);
qsort(v, last + 1, right);
}
void swap(char *v[], int i , int j)
{
char *temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
#include <string.h>
#define MAXLINES 5000
#define MAXLEN 1000
char *lineptr[MAXLINES];
int readlines(char *[], int);
void writelines(char *[],int);
void qsort(char *[],int, int);
int getline(char *, int);
char *alloc(int);
void main(void)
{
int nlines;
if((nlines = readlines(lineptr, MAXLINES)) >= 0)
{
qsort(lineptr, 0, nlines-1);
writelines(lineptr,nlines);
return 0;
}
else
{
printf("error: input too big to sort\n");
return 1;
}
}
int readlines(char *lineptr[], int maxlines)
{
int len, nlines;
char *p, line[MAXLEN];
nlines = 0;
while((len = getlines(line, MAXLEN)) > 0)
if(nlines >= maxlines || (p = alloc(len)) == NULL)
return -1;
else
{
line[len-1] = '\0';
strcpy(p, line);
lineptr[nlines++] = p;
}
return nlines;
}
void writelines(char *lineptr[], int nlines)
{
while(nlines-- > 0)
printf("%s\n", *lineptr++);
}
void qsort(char *v[], int left, int right)
{
int i, last;
if(left >= right)
{
return;
}
swap(v, left, (left + right) / 2);
last = left;
for(i=left;i<=right;++i)
if(strcmp(v[i], v[left]) < 0)
swap(v, ++last, i);
swap(v, left, last);
qsort(v, left, last - 1);
qsort(v, last + 1, right);
}
void swap(char *v[], int i , int j)
{
char *temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}