5, 3, -6, 8, 1 4, 2 Walk through elements; switch them if they are out of order. p 5, 3, -6, 8, 1, 4, 2 3, 5, -6, 8, 1, 4, 2 3, -6, 5, 8, 1, 4, 2 3, -6, 5, 1, 8, 4, 2 3, -6, 5, 1, 4, 8, 2 3, -6, 5, 1, 4, 2, 8 (8 bubbled up to the top) p 3, -6, 5, 1, 4, 2, 8 -6, 3, 5, 1, 4, 2, 8 -6, 3, 1, 5, 4, 2, 8 -6, 3, 1, 4, 5, 2, 8 -6, 3, 1, 4, 2, 5, 8 p -6, 3, 1, 4, 2, 5, 8 -6, 1, 3, 4, 2, 5, 8 -6, 1, 3, 2, 4, 5, 8 p -6, 1, 3, 2, 4, 5, 8 p -6, 1, 3, 2, 4, 5, 8 -6, 1, 2, 3, 4, 5, 8 p -6, 1, 2, 3, 4, 5, 8 p -6, 1, 2, 3, 4, 5, 8 p p Suppose we have a list of length n. first pass: n - 1 secon pass: n- 2 . . last pass: 1 total checks: 1 + 2 + 3 + ... + (n-1) n*(n-1)/2 = O(n^2). "Quadratic sort" Computing a gcd Suppose a, b, q and r are integers and that b = a*q + r then gcd(a,b) = gcd(a,r) >>> a = 7776 >>> b = 1048577 >>> b = 1048576 >>> r = 1048576%7776 >>> r 6592 >>> r = 7776%6592 >>> r 1184 >>> r = 6592%1184 >>> r 672 >>> r = 1184 % 672 >>> r 512 >>> r = 672%512 >>> r 160 >>> r = 512%160 >>> r 32 >>> 160 % 32 0 >>>