Leistungsmenge, die durch Bits erzeugt wird

Ich habe diesen Code, der die Leistung eines Arrays der Größe 4 erzeugt (Zahl ist nur ein Beispiel, weniger Kombinationen zu schreiben ...).

#define ARRAY_SIZE 4


unsigned int i, j, bits, i_max = 1U << ARRAY_SIZE;
int array[ARRAY_SIZE];

for (i = 0; i < i_max ; ++i) {
    for (bits = i, j = 0; bits; bits >>= 1, ++j) {
        if (bits & 1)
            printf("%d", array[j]);
    }
}

Ausgabe:

{}
{1}
{2}
{1, 2}
{3}
{1, 3}
{2, 3}
{1, 2, 3}
{4}
{1, 4}
{2, 4}
{1, 2, 4}
{3, 4}
{1, 3, 4}
{2, 3, 4}
{1, 2, 3, 4}

Ich brauche diese Ausgabe, um wie folgt zu sein:

{1}
{2}
{3}
{4}
{1, 2}
{1, 3}
{1, 4}
{2, 3}
{2, 4}
{3, 4}
{1, 2, 3}
{1, 2, 4}
{1, 3, 4}
{2, 3, 4}
{1, 2, 3, 4}

Also muss es so bestellt werden. Nachdem dieser Algorithmus beendet ist, kann ich diese Reihenfolge nicht mehr ausführen. Ich muss jede Kombination in jeder Iteration verwenden, also muss sie die bereits geordneten Kombinationen generieren. Kann mir jemand weiterhelfen? Ich denke, ich habe an alles gedacht ...

BEARBEITEN: Diese endgültige Ausgabe sollte ohne leeren Satz sein, aber es ist keine Priorität.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage