ファイルが1GBもあるからすべてを読んだらメモリーが足りなくなることは必須。
なので、普通にバブルソートとかクイックソートとかは使えません。
一定区間ごと分割してソートしてその区間を毎回変えてあげることによってできそうな気もします。でも、なかなか難しいですね。
ここは一つ、悩んでいる暇があったら大量のメモリが搭載されているマシーンでJavaのメモリの割り当てを増やして実行するのが一番速いのかも知れません。
なにせ、メモリーが足りないというエラーなのですから。Javaに1GB+αのメモリーを割り当ててあげればたぶん動作します。