0で埋めるより、抜いたところに一番後ろのカードを入れると無駄なループしなくていいよ。

allcard[i] = allcard[51-j];

i = rand() % (52 - j);