Can help with St Thomas. Coki Beach and Saphire Beach both offer decent snorkelling off the beach. Both are a 10 minute cab ride from the pier and both offer full facilities, no admission fees at either.
I am with Mandy. Your ship should have an early tender that makes a run to St. John in the morning. Maybe as early as 6 AM. Do It! It is worth getting up for. If there is no tender then take the Ferry from St Thomas and grab a cab to Trunk Bay. This is a snorkeling beach great for beginners with and underwater trail to follow. This has to be one of the most beautiful beaches in the world! And you will see tons of beautiful tropical fish while snorkeling there. There are always cabs in the lot to get back to the Ferry. Just be sure you know the Ferry times and get back in time to ferry back to St Thomas. It is a very short Ferry ride. Have fun!
i also agree with snorkeling over on St. John Island. There are lots of beaches to choose from. All breathtakingly beautiful.
St. Maarten - look into booking a ships tour over to Pineal Island for snorkeling.
The Buck Island information offered above may not be correct. There are two Buck Islands in the Virgin Islands. One is located off the coast of St Thomas and is a popular snorkelling spot and can be accessed by water taxi and many excursions go here.
The other (more famous ) is off the coast of St Croix. St Croix is NOT close to St Thomas and is NOT accessable by water taxi. You can take a sea plane to St Croix or a "fast Ferry" The fast ferries take about 75 to 90 minutes and cost about $65 round trip.
I believe the poster above is confusing the two Buck Islands.