int hoge[10000];
と言う配列を以下のように操作したいのですがいまひとつ効率のよい方法が思いつきません。

1.hogeには0以上の整数がランダムで入っている
2.0は空きと考え、hogeを添字0から順に走査して1以上の数であれば添字の小さい順に詰める
(301200960890なら312968900000としたい)

出来る限り効率の良い方法はどのようになるのでしょうか?