> Hmph. If the implementation is correct (which I cannot tell), this > needs to explain why it is a bit better than saying nothing. While going through the code, I noticed the TODO comment: "Measure QSORT() progress", and I thought it might be interesting to explore. For big codebases, being stuck at zero would make it feel like there's no progress happening and that is why putting a progress might be better. > > static int compare_pair_pos_vs_id(const void *_a, const void *_b) > > { > > struct pair_pos_vs_id *a = (struct pair_pos_vs_id *)_a; > > struct pair_pos_vs_id *b = (struct pair_pos_vs_id *)_b; > > This is a compar callback function used by the sorting machinery, > which is called QSORT but system-provided qsort() implementations > are not necessarily quick-sort [*]. Oh. Initially, I was unsure how to approach it, but I believed that tracking the highest pos value seen in comparisons could give a rough estimate of progress. However, as you pointed out, this assumes that qsort() processes elements in a structured way where the highest-indexed element isn't compared until later in the sort. I now see that this isn't a safe assumption Since there's no guarantee that progress would be reflected meaningfully, this approach isn't good. Let me know if you have any suggestions/comments:) Thanks, Ayush