I would suggest the following:
First you would need to create a file format to save progress, I know you wouldn't sort all of the pages in one go, also in case any runtime exception happens you'll hate it if you have to start all over again. I would suggest for the file format xml with a simple structure, you just need the image file name and the page number(sort order).
Second to have them in memory, I think the obvious choice would be a generic list.
you would create a structure that would have and ID/PageNumber int property, string with the filename to the image, and also an Image object with the Image already loaded in it, this would look something like this:
struct pages
{
public String documentName; //image document
public int PageNumber; //used to order pages
public Image img; // image in mem
}
List<pages> ImagesInMemory = new List<pages>();
Basically this is something you could figure out on your own, the tricky part would be to have this ordered, well you would do this based on PageNumber, simply you create a function that "orders" this list, you would pass in the page number you'd want to assign and the index of the object, so this function would just assign the number to the current element and traverse the whole list and add 1 if the current page number is between the current and previous PageNumber, I tried to post some more code but can't add too many characters in this box. please contact me for info