If I remember correctly, Ian sorted contacts according to "seperating velocity" which is defined as
float sep_vel=((Bvel-Avel)dot(normal) or put another way
float sep_vel=(relative velocity)dot(normal)
The idea being that the contact with the smallest (ie most negative velocity) should get sorted first
After I implemented this function however, and iterated over Ian's suggestion of at least 2x through the contact resolver, I noticed no discernable difference.
Of course, I speak as someone with very limited knowledge.
Something like that. Anyway... that book it is outdated and for learning purposes we should use all the GDC slides that was made by authors of current most used engines because they talk a lot about approaches that can reduce CPU overhead while satisfying solving constraints (sequential impulse solvers are quite stable).