(>>53の続き)
次にinsertion_sortを使って
static const int insertion_switch = 10;
/* クイックソート */
void quick_sort(int* first, int* last)
{
    ptrdiff_t length = last - first;
    int m = *(first + length / 2);
    int* left = first, * right = last - 1;
    for (; ; )
    {
        if (length <= 1)
            return;
        if (length <= insertion_switch)
        {
            insertion_sort(first, last);
            return;
        }
        while (*left < m) ++left;
        while (*right > m) --right;
        if (right <= left) break;
        int temp = *left; *left = *right; *right = temp;
    }
    quick_sort(first, left);
    quick_sort(right, last);
}

あとはint a[100];に対してquick_sort(a, a + 100);とすればいい。