I know this is very old issue, but many people are looking for that resolve.
For this example you have typical situation. On the beginning is single partition, and on the end swap partition is located. it isn't good because swap can be havely loaded, and end of rotated disk is the slowest part of it. what I suggest?
1. Create boot partition at the begin. Why at the begin? because many tools have got problems with end of large disk above 2TB barier. After boot partition should be swap partition. This is for performance. Rest of disk should be used for other partitions.
But what with this situation? I don't recommend expanding sda1. I suggest creating other partitions after sda1 & sda2, mounted as /home and /usr . on that directories are stored the most user and system data, and it is possible to securely move data from that directories to new partitions.
But. (second "but") if you still want keep your current structure, you shuld:
first remove swap partition. you should do swapoff, remark this in /etc fstab. if swapon tells you (see man) no swap is used, you can remove it by partition tool (fdisk or similar). when you don't have got this partition, you can enlarge your sda1. using fdisk you should firstly print partition. it is for remembering where it starts. secondly remove partition using 'd' key. don't panic, nothing is written to hard drive :) after print you see, no partition exist on the disk. next create new partition. be careful. see on what sector original partition started. write the same number. after that look at the end. fdisk prompt you for last available sector. use calculator and assign in your mind how much swap do you need in kilobytes. multiple it by 2, and substract this number from last sector number prompted by fdisk. create partition. print this (it is still in fdisk temporary memory), and look all is ok. after this press 'w' key, this will tru write new partitioning to the drive. you will see information all is synced, or sync is failed. if failed, you can call command partx /dev/sda for doing sync. if it still fails, you should reboot your system. after reboot you have prepared larger partition, but filesystem on it is still smaller. you should grow it. ext4 is growable on the fly :) use resize2fs /dev/sda1 for do it. you don't need remounting rebooting etc. last, you should restore swap partition. simply use fdisk again, create new partition as swap. after writing 'w', device sda2 will be restored. prepare swap structure on it using mkswap /dev/sda2 , remove remarks for swap on /etc/fstab and finally do swapon -a . look using swapon or top command, swap is activated.
i know, it's very long explanation. I hope it will be usable for any.
notice, in my opinion xfs filesystem is much better, unfortunately this fs doesn't support shrinking without temporary copying to alternate place. but shrink is used rarely. it is nice, xfs takes extremaly little place for his own metadata, and is faster in many ways in comparation to ext4.
another hinit, better use some LVM as middle layer for partitioning. after that any resizing is much easier. performance is comparable. of course, you can use mix of hdd managament. you can use in common raw partitions and lvm.