JavaScript arrays offer the sort
method, which allows passing in a callback function to do custom sorting of non-strings. If you can perform a "blocking" user input collection in such a callback function, you could fully sort the list with exactly the set of "which one is more important" questions needed (perhaps a window.confirm()
with a question like "Is A more important than B?"). This would be ugly in terms of beautiful-UI, but could be practical and work.
To avoid the question-answering occurring during execution of the sort, you could at least assign the list an order to start, perform the sort and record which pairs of items were asked for, then present all those pairs in a list. Any change of which of 2 items was more important would trigger a resort and then the user would be asked to answer only those items that were new (and hadn't already been asked).
Tad's idea to allow the user to drag-and-drop to sort the list could be good (though it sounds like you want the "which is more important" flow instead), though I recommend jQuery and its Sortable plugin.
To address which sort algorithm is the best to use, that may be difficult. No one algorithm will reliably sort the list in the fewest number of steps, because the number of steps required always depends on the initial position of the items. Some sort algorithms are indeed more efficient, but they still can be costly if the list starts out sorted completely in reverse or in another way hostile to that algorithm. No matter what scheme you use, there will be ways that it is inefficient. Some are better than others, however.
To get a handle on the issue, start by reviewing popular sorting algorithms. Each sort has a best-case, average, and worst-case scenario. In the question you linked in your comment, the questioner said his data had sort keys that were repeated many times, thus an answerer suggested maybe using the insertion sort whose best-case occurs when the input is already sorted. In the case of the list being exactly in reverse, though, it has a very bad worst-case performance of O(n2). For arbitrary comparisons, pretty much the best you can achieve is O(n log n).
I do have one idea to cut down on the number of questions, though: start by presenting the whole list of items with a set of H M L (high medium low) buttons for the user to assign an overall priority to each. This can be done very quickly by the user. When done, sort each list individually. This is basically doing a distribution sort, and will cut down on the number of "which is more important" questions by a huge amount. My instinct says that sorting three lists of 10 items each is quite a bit less expensive than sorting one list of 30.
Your best bet is probably a merge sort or a heap sort. But you need to examine the algorithms yourself. Perhaps you would use one sort at the beginning when everything is out of order, then for later sorts use a method that performs best when the inputs are close to in order already.
In any case, my idea of breaking the list into H M L categories should substantially reduce the number of steps with any sort method.
After some more thought, it seems to me that having the user perform what amounts to an insertion sort may be a reasonable method. To implement it, instead of making the user compare an unsorted item one at a time to each already-sorted item, simply ask the user to place the new item at the correct place in the already-sorted items. Ask the user to pick one item to start with. It can be the most important, least important, or somewhere in the middle--it doesn't matter. Then, display the list of one item (with plenty of room for more) and then one at a time, have him drag into place (or otherwise choose) where in the list each unsorted item belongs. When done, the list will be sorted. This gains efficiencies because the user will not have to read (and compare) every single item in his list one at a time at each step--he'll know whether his item belongs near the top, in the middle, or at the bottom of the in-process, already-organized portion of the list simply by familiarity with it. He'll be able to scan quickly through the obvious non-matching-priority areas and then zero in on the few items he has to carefully weigh to determine proper order. At any time, if he changes his mind about the order of already-placed items, he can rearrange them.
As one final comment, I would like to suggest that you look into the Getting Things Done model, which has some advantages over the "do things in order of priority" model. At the very least, the concepts of having a trusted computer system, scheduling things and forgetting them, and avoiding the repetition of the same work seem invaluable for any system to help users get things done.