int main(int argc, char *argv[]) { int opt; int reverse = 0; int fold = 0; int total = -1; char *lines[MAXLINES]; while ((opt = getopt(argc, argv, "rhf")) != -1) { switch (opt) { case 'r': reverse = 1; break; case 'f': fold = 1; break; case 'h': usage(argv[0]); break; default: fprintf(stderr, "unknow opt: %c\n", opt); break; } } if ((total = readlines(lines, MAXLINES)) >= 0) { if (fold) { qsort_c(lines, 0, total, charcmp); } else { qsort_c(lines, 0, total, strcmp); } writelines(lines, total + 1, reverse); } exit(0); }
// recursive Qsort--------------------------------(not used) void qsort_c(float *array,int l,int r,int *index) { int j; if ( l < r ) { // divide and conquer j = partition( array, l, r,index); // j=(l+r)/2; qsort_c( array, l, j-1,index); qsort_c( array, j+1, r,index); } }
void qsort_c(char *v[], int left, int right, int (*comp)(void *, void *)) { int i; int last; 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_c(v, left, last - 1, comp); qsort_c(v, last + 1, right, comp); }