날마다 새롭게 또 날마다 새롭게

문자 정렬 + 숫자 정렬 프로그램 - 구현 코드 - 함수 포인터 사용 본문

프로그래밍/C / C++

문자 정렬 + 숫자 정렬 프로그램 - 구현 코드 - 함수 포인터 사용

아무유 2013. 4. 11. 21:06

#inlcude <stdio.h>

#include <string.h>    문자열 정렬 프로그램


#define MAXLINES 5000    /* max lines to be sorted */

char *lineptr[MAXLINES];    /* pointers to text lines */


int readlines(char *lineptr[], int nlines);

void writelines(char *lineptr[], int nlines);

void qsort(void *lineptr[], int left, int right, int(*comp)(void*,void*));

int numcmp(char *, char *);



/* sort input lines */

int main(int argc,char *argv[])

{

int nlines;    /* number of input lines read */

int numeric = 0;    /* 1 if numeric sort */


if(argc > 1 && strcmp(argv[1],"-n")==0)

numeric = 1;

if((nlines=readlines(lineptr,MAXLINES))>=0) {

qsort((void**)lineptr,0,nlines-1,(int(*)(void*,void*))(numeric?numcmp:strcmp));

writelines(lineptr,nlines);

return 0;

} else {

printf("input too big to sort\n");

return 1;

}

} 


void qsort(void *v[], int left, int right, int (*comp)(void*,void*))

{

int i, last;

void swap(void *v[],int,int);

if(left>=right)

return ;

swap(v,left,(left+right)/2);

last=left;

for(i=left+1;i<=right;i++)

if((*comp)(v[i],v[left]) < 0)

swap(v,++last,i);

swap(v,left,last);

qsort(v,left,last-1,comp);

qsort(v,last+1,right,comp);

}



Comments