You can improve the perf. of your script even more by first storing the output of du in a temp file and instead of doing du over and over just cat-ing the temp file on the sort and awk pipes.
It's a tradeoff between accuracy and strain on IO-system, because you'll be basing your sort and awk pipes on the du output of a while ago, but catting a file is easier than stat-ing each file/dir in a filesystem and counting blocks - even if the data is 95% cached...
HTH,
p5wizard