#include #define NMAX 100 void swap(int *a, int *b); int ascending(const int a, const int b); int descending(const int a, const int b); void qsort(int left, int right, int *a, int (*comp_f)(int a, int b)); void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; } int ascending(const int a, const int b) { return a < b; } int descending(const int a, const int b) { return a > b; } void qsort(int left, int right, int *a, int (*comp_f)(int a, int b)) { int pivot, pivot_value, p, i; if ( left < right ) { pivot = (left + right)/2; pivot_value = *(a + pivot); *(a + pivot) = *(a + left); p = left; for ( i = left+1; i<= right; i++ ){ if ((*comp_f)(*(a+i), pivot_value)){ p++; swap((a+p), (a+i)); } } *(a+left) = *(a+p); *(a+p) = pivot_value; qsort(left, p-1, a, comp_f); qsort(p+1, right, a, comp_f); } } int main(void) { int i, n=0, a[NMAX], order; for(order=0; !(1<=order && order<=2);) { printf("昇順にソートする場合は 1\n"); printf("降順にソートする場合は 2 を入力して下さい:"); scanf("%d", &order); } printf("整数を複数個入力してください Ctrl-D で終了\n"); while(scanf("%d",&a[n])!=EOF) n++; if ( order == 1 ){ qsort(0, n-1, a, ascending); } else { qsort(0, n-1, a, descending); } for( i=0; i