Efficiently enumerate all subsets of an ordered set What's the most efficient way to enumerate all (ordered) subsets of an ordered set? So, for example, given the ordered set $\{2, 5, 6\}$ (using the normal ordering for integers), I need the following:
$$\{\}, \{2\}, \{5\}, \{6\}, \{2, 5\}, \{2, 6\}, \{5, 6\}, \{2, 5, 6\}.$$
Smaller subsets should come first, but the ordering of the subsets of equal size is not important.

I'm looking for an algorithm that is efficient both in theory and in implementation (in a general purpose programming language) for very large sets.
One possibility is to generate separately all subsets of size $k$ using the following recursive approach:


  A $k$-subset of $a_1,\ldots,a_n$ is either a $k$-subset of $a_2,\ldots,a_n$ or $a_1$ adjoined to a $(k-1)$-subset of $a_2,\ldots,a_n$.


Run this recursive algorithm for $k=0,\ldots,n$. If you're careful, you will get a lexicographically ordered output.