Why is this a proof by contradiction for this algorithm? Isn't this a direct proof instead?
You seem to think the structure of the proof is:


suppose the algorithm is incorrect;
prove that the algorithm is, in fact, correct;
this contradicts 1., so the algorithm is correct.


That's almost, but not quite true. Step 2 doesn't prove that the returned value $\mathrm{max}$ is bigger than every element of the array, which is what would be required to prove that the algorithm is correct. It just proves that $\mathrm{max}$ is bigger than the specific array value that was supposed to be a counterexample in step 1.

But, as Yuval has pointed out, the proof is much easier if you forget about contradiction completely and prove that $\mathrm{max}$ is in the array (identical to the given proof) and then show that $\mathrm{max}$ is at least as big as every array element (identical to the proof except "for all&nbsp;$j$" instead of just for one supposed counterexample.