For resizing partitions, look at gnuparted or commercial software like PartitionMagic. This is not a simple process because the filesystems on the partitions that you are trying to resize weren't ever designed to be resized. However, software tends to do a good job of this these days (though it's a good idea to take a backup first anyway).
Changing swap space is a more difficult question.
Under Linux, swap space is used for two reasons. The first use is to store data that doesn't fit in RAM (effectively giving you more memory), and the second, less common, use is to store data that won't be used for a long time, to make more free RAM available for disk and I/O caching.
The amount of swap that you need
is equal to the maximum amount of memory that you might be using instantaneously, minus the amount of physical RAM that you have. This can be difficult to determine, but typically having more swap is good because it either makes things marginally faster or stops programs from crashing with out of memory errors.
You can see the amount of memory that you are using (swap and RAM) at any point in time in /proc/meminfo.
You could always turn swap off
and see if it makes any noticable effect on your system, before messing with the swap partition. You can also use a swap file
dd if=/dev/zero of=/swapfile; mkswapfs /swapfile bs=1024 count=size_in_kb && mkswap /swapfile
You will also need to add the swap file to /etc/fstab in this case.