C++
--
    void s(int *deck) {
        swap(deck[1], rand(2, 51));
        deck[0] *= 100;

        for(deck[0] += 2; (deck[0] % 100) < 51; deck[0]++) {
            swap(deck[deck[0] % 100],
              deck[rand(0, 1) ? rand(1, (deck[0] % 100) - 1]) : rand(deck[0] % 100+1, 51)]);
        }
        swap(deck[51], rand(1, 50)); 

        deck[0] = (deck[0] - 51) / 100;
        swap(deck[rand(1, 51)], deck[0]);
    }

    void shuffle(int *deck) {
        s(deck);
        s(deck);
    }

Avoids swapping elements with themselves, so has to call twice to be random.