스트링 배열 정렬(sorting)하기 with C
[파일명: testSort.c]------------------------------------------------
#include <stdio.h>
#include <string.h>
char SBUF[20][80];
char TBUF[80];
void quickSort(char array[20][80], int start, int end);
void swap(char array[20][80], int x, int y);
void printArray(char array[20][80], int start, int end);
void exit(int n);
int main(int argc, char* argv[]) {
char* pbuf;
int i;
if (argc > 1 && argc < 22) {
for (i = 0; i < argc - 1; i++) {
if (strlen(argv[i+1]) > 79) {
printf("Caught: strlen(\"%s\") = %d, which is too long.\n", argv[i+1], strlen(argv[i+1]));
exit(1);
}
sprintf(SBUF[i], argv[i+1]);
}
quickSort(&SBUF[0], 0, argc - 2);
printArray(SBUF, 0, argc - 2);
}
else if (argc > 21) {
printf("Given too many items. (The counter of items should be less then 20.)\n");
exit(1);
}
return 0;
}
void quickSort(char array[20][80], int start, int end) {
int i = start;
int k = end;
char pivot[80];
if (end - start >= 1) {
strcpy(pivot, array[start]);
while (k > i) {
while (strcmp(array[i], pivot) <= 0 && i <= end && k > i)
i++;
while (strcmp(array[k], pivot) > 0 && k >= start && k >= i)
k--;
if (k > i) {
swap(array, i, k);
}
}
swap(array, start, k);
quickSort(array, start, k - 1);
quickSort(array, k + 1, end);
}
else {
return;
}
}
void swap(char array[20][80], int x, int y) {
strcpy(TBUF, array[x]);
strcpy(array[x], array[y]);
strcpy(array[y], TBUF);
}
void printArray(char array[20][80], int start, int end) {
int i;
printf("[");
for (i = start; i < end; i++) {
printf("%s, ", array[i]);
}
if (end >= start)
printf("%s", array[end]);
printf("]\n");
}
------------------------------------------------
컴파일> cl testSort.c
또는
컴파일> bcc32 testSort.c
또는
컴파일> gcc -o testSort testSort.c
실행> testSort 하나 둘 셋 넷
[넷, 둘, 셋, 하나]
실행> ./testSort one two thee four
[four, one, three, two]