シャッフルの人に聞きたいんだが、どこが遅いかおおむね分かったりしないかな。
というかどれくらいかかってるの?

ファイル名ということであれば256バイト固定でやってもいいように思う。
3万回のallocのコストが影響してるのかもしれないし。
連続領域の2次元配列で、インデックスのみのシャッフル(>>956-957)を試してみて。
毎回allocするのはコストが高いかも。ファイル名取得コストも調べないとだけど。

それと、tempという変数がグローバル変数ならローカル変数に変えてみて。