Jordan Decomposition
Mathematica, 140 139 105 bytes

Total[DiagonalMatrix@@@{{#},{1-Sign[Differences@#^2],1}}]&amp;@(x/.Solve[#~CharacteristicPolynomial~x==0,x])&amp;


I just found the builtin DiagonalMatrix which allows for an easy way to place the 0s and 1s along the superdiagonal.

Usage