You can use qtparted. It needs to be run on unmounted partitions. Easiest is to download the System Rescue CD http://freshmeat.net/projects/systemrescuecd/
and burn the iso image to a cd and boot from it. Same can be done with many other Live CD like knoppix, ubuntu, kubuntu, centos, many other live cd's to choose from.
I would read up on parted and see what kinds of limits with the type of filesystem those partitions are. Example it can resize rieserfs but can't move the begin block so it can't be moved just expanded and shricked.