As @Unionhawk said, your mobs are almost certainly de-spawning.
This means they vanish from the world forever, like footprints in the sand.
But as time goes by new mobs spawn, such is the circle of life.
In order to have a proper 'zoo' of mobs, you need to stop them de-spawning. In the case of Zombies, (as @MrLemon pointed out) simply throwing an item at them and letting them pick it up is enough to keep them spawned. However this only works for Zombies.
Thankfully, as of 1.6.1, there is an item designed to both name mobs and keep them spawned for good - the name tag.
Name tags can be found naturally within chests that spawn in dungeons or (as of 1.7.2) by fishing.
If you're in creative you can pull one straight from the creative inventory, and if you have access to console commands (i.e. you allowed them in map options when creating the map) you can use this command:
/give <player> 421 <amount>
Where <player>
is replaced with your minecraft name and <amount>
is replaced by the number of items you want. For example I would type:
/give Pharap 421 1
which would give me a single name tag.
Alternatively (as pointed out by @SaintWacko) you can avoid specifying your name by typing this instead:
/give @p 421 1
Also note that an enderman is the only mob naturally capable of teleporting, thus even after naming one it is still capable of escaping. Also note that name tags do not stop mobs from dying, so try not to suffocate them or set any on fire.