Is there a sort of an array that works in O(n*log(n)) worst case time complexity?
I saw in Wikipedia that there are sorts like that, but they are unstable, what does that mean? Is there a way to do in low space complexity?
Is there a best sorting algorithm?
An algorithm that requires only O(1) extra memory (so modifying the input array is permitted) is generally described as “in-place”, and that’s the lowest space complexity there is.
A sort is described as “stable” or not, according to what happens when there are two elements in the input which compare as equal, but are somehow distinguishable. For example, suppose you have a bunch of records with an integer field and a string field, and you sort them on the integer field. The question is, if two records have the same integer value but different string values, then will the one that came first in the input, also come first in the output, or is it possible that they will be reversed? A stable sort is one that guarantees to preserve the order of elements that compare the same, but aren’t identical.
It is difficult to make a comparison sort that is in-place, and stable, and achieves
O(n log n)worst-case time complexity. I’ve a vague idea that it’s unknown whether or not it’s possible, but I don’t keep up to date on it.Last time someone asked about the subject, I found a couple of relevant papers, although that question wasn’t identical to this question:
How to sort in-place using the merge sort algorithm?
As far as a “best” sort is concerned – some sorting strategies take advantage of the fact that on the whole, taken across a large number of applications, computers spend a lot of time sorting data that isn’t randomly shuffled, it has some structure to it. Timsort is an algorithm to take advantage of commonly-encountered structure. It performs very well in a lot of practical applications. You can’t describe it as a “best” sort, since it’s a heuristic that appears to do well in practice, rather than being a strict improvement on previous algorithms. But it’s the “best” known overall in the opinion of people who ship it as their default sort (Python, Java 7, Android). You probably wouldn’t describe it as “low space complexity”, though, it’s no better than a standard merge sort.