Source: http://www-sop.inria.fr/members/Nicolas.Nisse/lectures/prepa/4_tri.pdf