This method repeatedly scans left to right and reverses descending runs, which reduce to runs of 2 after the first pass. This means that if the list starts sorted in reverse, odd-even sort would still take O(n^2) swaps but this would take O(1) reverses.
10/2/26: added fast render. Will render after every reversal if set to 0, otherwise every pass. That's O(n^2) renders when off, O(n) when on.