Potencia generada por bits.

Tengo este código que genera un conjunto de energía de una matriz de tamaño 4 (el número es solo un ejemplo, menos combinaciones para escribir ...).

#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]);
    }
}

Salida:

{}
{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}

Necesito que la salida sea como esta:

{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}

Así que tiene que ser ordenado así. No puedo hacer ese pedido una vez que finaliza ese algoritmo, tengo que usar cada combinación en cada iteración, así que tiene que generar las combinaciones ya ordenadas. ¿Alguien me puede ayudar? Creo que estaba pensando en todo ...

EDITAR: Esa salida final debería estar sin un conjunto vacío, pero no es una prioridad.

Respuestas a la pregunta(5)

Su respuesta a la pregunta