I've used Diskeeper for a long time and it's all I've ever needed.
I love the Set it and Forget it option it has. When the computer (or a certain HDD) is idle for a period of time, it works on defragmenting it. If suddenly, you need to read or write to the computer or drive, it stops and lets you do what you need to do w/o hogging a ton of resources.
Its got a lot of nice features, like boot-time defragmenting and page-file defragmenting. It can tailor itself to your needs (more free space, better performance or both) and run silently in the background. It's real nice and fairly cheap for the features.