コード例 #1
0
ファイル: qsort-2.c プロジェクト: peterlintang/c-language
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);
}
コード例 #2
0
ファイル: qfunc.c プロジェクト: ots/qnormalization
// 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);
  }

}
コード例 #3
0
ファイル: qsort-2.c プロジェクト: peterlintang/c-language
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);
}