There are several problems here.
The syntax error is caused by the missing ; before the done.
Another syntax error on the same line is the "$arr[@]" instead of "${arr[@]}".
for i in ${arr[@]}; do printf "%s /n" "${arr[@]}"; done | sort -n
Now this is correct syntax, but I don't think it does what you expect.
To print a newline after each number, you need to write \n in the printf instead of /n.
To print the content of the array sorted, you can write:
printf "%s\n" "${arr[@]}" | sort -n
Or write with a loop:
for v in ${arr[@]}; do echo $v; done | sort -n
But using both techniques together doesn't make much sense.