Sort an Array

Sort an array in O(n log n) using merge sort or randomized quicksort.

Medium
Time O(n log n) Space O(n)
LeetCode
4 min read
sorting divide-conquer

Problem#

Sort nums ascending in O(n log n) without using built-in sort.

Examples#

  • [5,2,3,1][1,2,3,5]

Constraints#

  • 1 <= nums.length <= 5 * 10^4.

Approach#

Top-down merge sort. Split, recurse, merge — classic divide and conquer.

Solution#

Sort an Array (merge sort)
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
vector<int> buf(nums.size());
mergeSort(nums, buf, 0, nums.size() - 1);
return nums;
}
private:
void mergeSort(vector<int>& a, vector<int>& buf, int lo, int hi) {
if (lo >= hi) return;
int mid = lo + (hi - lo) / 2;
mergeSort(a, buf, lo, mid);
mergeSort(a, buf, mid + 1, hi);
int i = lo, j = mid + 1, k = lo;
while (i <= mid && j <= hi)
buf[k++] = a[i] <= a[j] ? a[i++] : a[j++];
while (i <= mid) buf[k++] = a[i++];
while (j <= hi) buf[k++] = a[j++];
for (int x = lo; x <= hi; ++x) a[x] = buf[x];
}
};

Editorial#

Merge sort is the safest O(n log n) for adversarial inputs (quicksort can degrade to O(n²) without random pivots). The auxiliary buffer is reused across recursive calls to avoid allocations.

Complexity#

  • Time: O(n log n).
  • Space: O(n).

Concept revision#

Search ESC

Keyboard shortcuts

Shortcuts are disabled while typing in inputs.