The O(n^2) pair loop reads oriented[j] for every j; with Vec<Vec<f64>> that chased a separate heap allocation per individual. A flat n*m buffer keeps those reads contiguous and sequential in j. non_dominated_sort_2d n=200: 1_288_072 -> 1_096_738 (-15%, 1.17x); n=50 -19%. nsga2 one-generation -5.7%. Combined with the earlier antisymmetry fix, n=200 is down 55% from the original 2.46M. Pure data-layout change -- output bit-identical, all 606 tests pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>