일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- C
- Realm
- Exception
- 컴파일
- hardwareacceleration
- ethereum
- quick-start
- 스트리밍
- bigquery
- Gradle
- firebase
- fabic
- Android
- kotlin
- error
- dataginding
- log
- vuepress
- 안드로이드
- 다윈
- test
- coroutines
- Hyperledger
- LAYER_TYPE_SOFTWARE
- fabric-sdk-java
- web3js
- porterduff
- Glide
- null safety
- convert
- Today
- Total
날마다 새롭게 또 날마다 새롭게
문자 정렬 + 숫자 정렬 프로그램 - 구현 코드 - 함수 포인터 사용 본문
#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);
}