void ex_quick_sort(TYPE* data, size_t size) { TYPE m; TYPE *l, *r, *e; if (size <= 32) { if (size <= 1) return; insert_sort(data, size); return; } m = data[size / 2]; l = data; e = data + size; r = e - 1; for (;;) { while (*l < m) ++l; while (m < *r) --r; if (l >= r) break; swap(*l, *r); ++l; } ex_quick_sort(data, l - data); ex_quick_sort(l , e - l ); }