GNU sort has a -h/--human-numeric-sort option and h sort key flag to handle those (it expects 1024-based units (1023 sorts before 1K) which happens to be how GNU du counts as well.
Now note that some precision is lost when you use du -h, so the order may end-up being wrong:
$ du -k a b 1212 a 1208 b $ du -h a b | sort -h 1.2M a 1.2M b
As mentioned by @StephenKitt, you can work around it by telling du to give you the full precision and only convert to human format after sorting using for instance GNU numfmt:
$ du --block-size=1 a b | sort -n | numfmt --to=iec 1.2M b 1.2M a
(beware that spacing is affected). All of the above assume file names don't contain newline characters.
As for the generic question about ordering by size, zsh globs have a oL glob qualifier for that (note that it's by size, not disk usage).
ls -S could be done (with GNU ls for its -U for unsorted):
ls -ldU -- *(oL)
For sorting by size after symlink resolution:
ls -LldU -- *(-oL) wc -c -- *(-oL)
sorthassort -h(note that your--max-depth=1is GNU-specific already)-hisn’t a standard option fordueither ;-).