I discuss various ways to remove many rows faster at
https://blogs.oracle.com/sql/how-to-delete-millions-of-rows-fast-with-sql Assuming you're on 12.2 and there's no (enabled) FKs referencing your table a filtered table move is the easiest:
alter table ...
move including rows
where rows_to_keep = 'Y'
Are you really fetching a billion+ rows?! If so that's going to take a looooooooong time whatever you do!
Sorting a data set this large will also be slow. Adding an index on the order by columns can speed this up.
But really the question here is -
why are you fetching all that data? What are you doing with it?