Here's a dungeon generator. It's fast-ish and requires less prep than a real dungeon but still requires some, but the main advantages are it's very reusable and will tend to produce dungeons that make some sense, with the danger and reward increasing as the PCs move further in...
You'll need to think of 8 monsters, put them in line from least scary to most scary (scariest is 8, wimpiest is 1), or in a rough hierarchical order from boss down through lieutenants, soldiers and finishing with vermin (at 1).
Optional step: Think up 8 traps and put them in order from least to most scary. If you can't think of any or don't have time, use the standard array (poison gas, needle trap, pit trap) and just arrange them so that Trap 8 does the most damage and Trap 1 does the least (you could go: d4, d6, blind, d8, d10, d12, d20, save or die, for example).
Optional step: Think of 8 treasures and do the same. If you don't have time to do this step, just go from like 10 gp to 800 gp or whatever is scaled appropriately.
Optional: Think of 8 locks and do the same. If you don't have time, assume lock 8 just takes the longest and makes the most noise and lock 1 is the easiest.
Now take a look at the graph (I have filled in some sample monsters and treasures on the right of the graph and have left traps and locks off).(click to enlarge all these)
This will all be explained, so hold on.
First: It works like this: the farther the PCs get from the entrance to the dungeon (in rooms or levels, but most of the time it'll be in rooms) the (usually) fiercer the opposition and (usually) greater the reward.
(This makes sense: this is the point of buildings, from a fortification standpoint--the boss hides away with his loot and puts layers of underlings between himself/herself and any entrances, or the fearsome beast keeps its pile of bloody bones in a cave far from hunters and other predators and the other animals lurk at a respectful distance to scavenge leftovers. Also, the further the PCs go from the entrance, the more likely they are to go where no looters have gone before.)
(Note also there are spikes in the graph making it so that the "front door" is likely to be defended as are the sort of mid-zone "living areas".)
When DMing any room, you look along the bottom for however many rooms you are from the entrance to the dungeon. (Let's say you're 3 rooms away. Keep in mind PCs may not know all the entrances to the dungeon.) Follow the vertical line up from there and you'll see that it intersects a green line representing monsters, a blue one representing locks, a red one representing treasure, and a pink one representing traps. When you intersect, look left (the numbers 1-8 down the right are just for reference later.)
For each room, roll 4d4--one die for each element. (For maximum speed use 4 different colors matching the graph colors but whatever.) (oh, hold on, ignore any line that's waaaay at the bottom below -3, that means you don't have to roll a d4 for that thing cause there's no chance of getting it) and add the modifier indicated for that element on the left. For example, in room 3, the trap modifier (pink) is minus one.
Then you get a number. If it's zero or below, that thing is not present in the room. If it's a positive number, then the room contains a thing of that type and level of awesomeness/toughness/scariness etc. Like if you rolled a 3 for traps and the mod was -1, then you'd have a 2 which means this room contains Trap 2, your second wimpiest trap.
Here's a bigger one for a bigger dungeon using a d10 instead of a d4--meaning you have to think up 20 monsters instead of just 8.
This method might be a tad cumbersome (4d4 for every room), like I said, I haven't tried it--however, I see advantages:
-It produces dungeons that make sense and does so relatively quickly.
-It is re-usable. If you're running a sandbox campaign, there is always the chance the PCs will run off to loot some theoretically-fortified locale or obscure ruin that you haven't written yet. If you can think of 8 types of inhabitants that might be in such a place, you've got a dungeon.
(obviously this method doesn't generate layout, I generally go by the "assume the room's square and has d4 exits" method if I have to pull a dungeon out of my ass)
-The only other way to produce results like this would be to write percentage charts for each room--i.e. room 8 has a 30% chance of monsters, a 60% chance of traps--PLUS have a second chart making it so you'd roll on a slightly different encounter chart the further you get from the entrance. i.e. in this method, the array of possible monsters near the ends is different than the array in the middle and it's all done on one chart.
-This does not have to produce linear dungeons--no matter which way the PCs go, as long as they're getting far away from their lines of escape they are going to get to something. If you do this long enough and re-write your encounter chart at intervals, you might end up with an interesting factional dungeon.
-This "graph" method can also be used for other kinds of encounters in a slightly different way.
Look at the graph again.: Assume the 4 colored lines all represent different kinds of wilderness encounters (green is a regular monster, pink is npcs, red is some inert, found locale, and blue is weather, f'rinstance) the numbers along the bottom represent "days from nearest settlement".
Now on each day you have a different chance of meeting different things and the further you get from civilization the greater the hidden rewards, the fiercer the beasts, etc. (Though you could alter the graph to make NPC encounters less common as you get further from civilization and make the weather curve less steep--after all, bad weather is often more likely near settlements since they are often closest to the water.)
Likewise imagine the colors represent different kinds of urban encounters (thieves, soldiers, animals, etc.) and the numbers along the bottom represent the median income of the neighborhood. Rather than a series of encounter charts where beggars are rife in Cheapside by unheard of in Thistlewood Lane (seriously ever notice it takes half an hour to figure out who you're encountering in the City State of the Invincible Overlord?), you can just write one table 1-20 and put beggars at the bottom of it.
So, all you need to make your own is 4 pens and a piece of graph paper. That's good, right?
Or, if you're a computer programmer: there you go. This is probably how some computer games work already.
Now I personally have a list of groups or types of baddies in my campaign, with notes like this:
Villain(s): Hex king
Lieutenants: Eyes of fear & flame
Grunts: Caryatids, skeleton
Around: gloomwing moths
Trap regime: Creepy black fairy-tale like a music box that prevents magic so long as it plays
Treasure: Old magic and art
Schemes: Some kind of pact with Nephilidia
Villain(s): Insect gods (En-Gorath, Hammurabi, etc.) Chasme
Grunts: Githyanki, Jackalmen
Tough guys: Giant bugs, CIFALgangers
Trap regime: Ancient Egyptian-style curses & mechanical traps
Treasure: Gold, insect magic, blood gems
Schemes: Destroy Slaads
I have 20-some of these: groups of monsters that are on the same "team". If the PCs unexpectedly burst into a stronghold I can randomly pick a faction (or maybe I know from context whose it is), plug the notes into the graph and hey, that's enough dungeon until the PCs have left or the session ends and I have time to figure out what's really going on down there.