Depends alot on what you use it for!
The build in defragmenter of Win9x is a shame, every 3rd party software seems better.
In Win2k/XP the build in one is a cut-down version of Diskeeper and quite capable of quick defragmentation. It can even defragment the MFT (at least in XP), but you have to start it at least twice to make it do so.
While build in defraggers don't use any "optimization" modes, 3rd party software often claims to result in better system performance due to optimization.
I have quite some experience with PerfectDisk (PD), Speedisk (SD) and OO Defrag (OO). All offer to defrag several drives at once, while the build-in one can only handle one at a time. All offer optimization modes, and all can be used without optimizations
PD offers about the best middle of everything, since it orders data according to when it was last modified. Another big plus is that all files needed for booting are moved to the very beginning of a partition. This results in quick boot-loading, since all files are found together.
Everything that has not been modified for a a long time (usually 60 days, can manually be set) is moved to the beginning of a partition right after the boot-files, then come files not modifies for some time (30 days, can be modified), and then the rest that has been modified quite recently.
The main advantage of this is that after a first defragmentation all upcoming deframentations are done very quick, since data at the beginning of the partition has most likely not been modified anyway, and is thus not defragmented.
One disadvantage would be that files are only ordered roughly by modification date (everything older than 60 days looks the same for PD), not by how they are used. So it's quite possible that two files which are both loaded by a game are still seperated by several gigabyte of space on the disc.
PD is very good at putting all files together into one block and gives you a large block of free space at the end. Normally it would not move very big files just to fill in small block of space in between two files, cause it would take too long. But you can even force it to do that. A large block of free space results in less fragmentation in the future.
PD doesn't need too much CPU power, but utilitzes the drive to the fullest while defragmenting.
---
OO offers 5 different defragmentation modes. STEALTH is just like the build in defragger, but is said to use very little system resources, so you wont recognize it running in the background too much.
SPACE is the same but also tries to get a larger chunk of free space at the end.
NAME is about the most interesting, IF you use partitions to divide your harddrive into. It's said to be optimal for system partitions and that's quite true, I would also suggest you use it for GAMING partions as well!
Name sorts files on the disc in their alphabetical order, also including folders. So all files belonging to one folder are put together on the disc.
This may lead to faster load times when starting programs, because all files needed to start the program are resting in the same area of the disc. This means the read/write-head of the disc has to move less around. OO gives the example of all Windows being moves together, which should lead to quicker boot times.
There is a pro and a contra to this approach. Pro is that it really makes sense to put all files together that belong to the same program. Especially in games you will notice faster loading, IF the game uses many small files (UT2004). Some games use one big compressed file instead (Doom3), though. You wont notice much of a difference with these.
It also doesn't make any sense to use NAME when you have only one partition. Because your Windows folder will be moved to the end of data (W being quite at the end of the alphabet). Drives are quickest at the beginning and slowest at the end, so you will push your windows files to the end of the drive.
It also takes quite some time to defrag by NAME, since every new file has to be sorted in the next time you defragment, so all files afterwards have to be moved along.
MODIFIED is quite the same as PD's approach, while ACCESS only defragments those files often being used and puts those at the end, while seldom being used are put to the front (quite the same as MODIFIED, but also considering last access).
OO does not offer any mode to move boot files to the front of the disc, but XP does that by it's own once you leave your pc idle for some time. PD's method is more efficient for that, though. You shouldn't need it anyway when you use a dedicated system-partition and defragment with the NAME option.
OO offers the possibility to defragment while you're working and tries to slow down file access as much as possible. While this leads to longer defragmentation it enables you to keep working meanwhile.
---
SD uses a mix of the other two defraggers, it sorts by access and modification dates. Files that are often accessed but seldom modified are put to the beginning, files seldom accessed and seldom modified after that, then files often accessed and seldom modified, then files seldom accessed and often modified.
While this is a very good approach it takes a very very long time to defragment the drive, since literally every file is moves, and even small changes to the files need new ordering the next time you defragment the drive.
One big plus is that you can manually set files and folder to be moved to the beginning or end of the partition regardless of dates or names.
---
Whatever defragger you prefer, the best way to keep your disc access and defragmentation fast is to divide it into several partitions!
When you do that, keep in mind that your drive is fastest at the beginning, and slowest at the end. You can use HD TACH to get a graph of your drives speed-zones and decide on that how big to make the partitions.
This will also place all necessary system files (MFT/FAT) near the files you are accessing, instead of keeping it far away on one end of the drive, while the files are at the other end. And you can chose drive letters that correspond to the use of the partition (D: Data, G: Games, I: Install, F: Filesharing, T: Temp, H: Home, E: Entertainment).. you get the point.
1. Create one not too big partition for SYSTEM files (Windows) and everyday SOFTWARE (Office tools, system utilities and the like). This ensures that all those files are stored near each other on the disc AND they will stay at the beginning of the disc, where access is quickest. You can also use this partition for your own small files, like Word and Excel files if you like (I use a small own partition right after the system-partition for these).
2. Create a small TEMP (1-2gb max) partition for temporary files and especially for the Internet Cache (be it Internet Explorer or any other browser). These files are created, deleted and modified alot, consisting of many very small files. If you keep 'em in their own small partition they wont hassle with your defragmentation of other partitions. Also consider using only 1k cluster-size for this one.
Disadvantage is that when some temp-file needs to be created while the disc-head is at some whole other place, it needs to be moved all the way to the temp-partition. When you use ONE big partition then temp-files are just created at the next free space position.
3. Create a DATA partition for big files that need quick access right after that (or use the System-partition for that). Make it BIG!

Consider using larger cluster sizes. It's a good place for multimedia-files (audio and video) you are working on. It can also be used when you need to decompress big files you downloaded on filesharing networks (like whole DVD images and the like).
Use middle-sized clusters on this one, depending on how you use it.
4. If you use FILESHARING then consider to create an own partition for that. Filesharing software spreads the files all across the partition. Especially big downlods are often split into several dozend to several hundreds (!) of fragments.
Disadvantage is that when you run Filesharing clients in the background the drive-head has to move to the filesharing partition all the time, to read/save the allways flowing data. But those data-chunks are usually only a few KB in size and can easily be cached by windows for optimized access. Unfortunately most filesharing clients seem to use quite bad file-access algorithms.
Use standard 4KB clusters on this one, even though the files are often several hundred MB big. That is because the clients will usually only send/receive in the KB/s range, so it's best to have small clusters, since Windows always needs to read/write a whole cluster.
Defragment this one with MODIFIED kind of methods, like OO, PD and SD all offers. That way your share files that are already done downloading will be put to the beginning, while the often modified downloads are put to the end.
5. Create a partition for GAMES only. These usually have big amounts of data that once written to disk is never again modified, while using some files for temporary things and savegames. If you use OO you should consider to use NAME, so each game's files are put together near each other.
This partition doesn't need to be near the beginning of the drive's space, because usually games load all necessary data for each level and wont access the drive afterwards.
BUT, if you lack RAM then consider putting this partition more to the beginning in front of the data partition, cause the drive will be accessed alot in between levels.
Depending on the game it's files will usually be only a few very big ones, so you could use big cluster sizes without wasting much space. But some games use many small files being only a few KB in size. And even when those are compressed into one big file they still have to be decompressed one after another. This is especially true if you lack RAM.
6. Create a partition for MEDIA files like MP3 and movie files, which are only accessed for being played. Usually these don't need any high transfer rates or quick access and shouldn't take space from the faster areas of the drive.
Use big cluster size on this one, since those files are usually several MB big.
7. Create a partition at the very end for INSTALLable files. All software you download and keep on your drive instead of burning it to CD/DVD should be put here.
This one will usually be filled with DRIVERS, UPDATES and files for software installation. You wont need it often and it doesn't need any quick access or high transfer rates for these, since they're only access very seldom, if at all!
It's also a good place for any IMAGES you keep (CD or DVD), those wont be accessed alot anyway.
Consider burning these to removeable media once you notice that you don't use it more often than once in a millenium.
8. Spread your Swapfile over several partitions. Especially if you lack RAM and want to use Games or need to work on big multimedia-files.
When Windows needs to swap data out of RAM it will do so at the next possible place. So when you have some swapfile space near the data you are currently accessing, swapping should be quicker.
For example: If your pc is loading a lot of level data in Far Cry on one end of the drive while the swapfile is at the other end of the drive it will take alot of head-movement to get that done, since swapping and loading is done simultanously.
If you want to run Games, but lack RAM it's quite a good idea to put part of your Swapfile on the GAMES partition. If you want to work on big media-files it's a good idea to copy them to your system-partition while you work on them, or have part of your swapfile on the DATA partition as well.
Since memory is divided into blocks of 4KB by the CPU it seems to be better to have corresponding cluster sizes of 4KB on those partition as well. But I have no real idea how Windows handles that part of swapping.
Buying more RAM is always the better option by the way!