What if sorting could remember the original order of equal items automatically?
Why Sorting Stability and When to Use Which Sort in DSA C++?
Imagine you have a list of students with their names and grades. You want to sort them by grade, but keep the original order for students with the same grade.
If you try to do this by hand, it is very hard to keep track of who came first when grades are equal.
Sorting manually is slow and confusing. You might mix up students with the same grade, losing the original order. This causes mistakes and wastes time.
Sorting stability means when two items have the same key, their order stays the same after sorting. Using stable sorts keeps the original order for equal items automatically, making sorting reliable and easy.
for (int i = 0; i < n-1; i++) { for (int j = 0; j < n-i-1; j++) { if (arr[j].grade > arr[j+1].grade) { std::swap(arr[j], arr[j+1]); } } }
std::stable_sort(arr.begin(), arr.end(), [](auto &a, auto &b) {
return a.grade < b.grade;
});Stable sorting lets you sort complex data by one key without losing the original order of equal items, enabling multi-level sorting and preserving important order.
When sorting a list of employees by department and then by joining date, stable sort keeps employees in the same department ordered by their joining date automatically.
Manual sorting can mix up equal items and lose order.
Stable sorts keep the original order of equal elements.
Use stable sort when order matters for equal keys.
Practice
Solution
Step 1: Understand stability in sorting
A stable sort keeps the relative order of equal elements the same as in the input.Step 2: Check common sorting algorithms
Merge Sort is stable because it merges sorted halves without changing order of equal elements. Quick Sort, Heap Sort, and Selection Sort are not stable by default.Final Answer:
Merge Sort -> Option AQuick Check:
Stable sort = Merge Sort [OK]
- Thinking Quick Sort is stable
- Confusing stability with time complexity
- Assuming all comparison sorts are stable
v in C++ STL?Solution
Step 1: Recall C++ STL stable sort syntax
The function is std::stable_sort with two iterators as arguments.Step 2: Check options for correctness
std::stable_sort(v.begin(), v.end()); matches correct syntax. Options A, B, and D are invalid or do not exist in STL.Final Answer:
std::stable_sort(v.begin(), v.end()); -> Option CQuick Check:
Correct stable sort syntax = std::stable_sort(v.begin(), v.end()); [OK]
- Using std::sort for stable sorting
- Calling non-existent member functions
- Passing wrong arguments to sort functions
struct Item {
int key;
char id;
};
std::vector<Item> v = {{2, 'a'}, {1, 'b'}, {2, 'c'}};
std::stable_sort(v.begin(), v.end(), [](Item x, Item y) { return x.key < y.key; });
for (auto &item : v) std::cout << item.key << item.id << ' ';
Solution
Step 1: Understand stable_sort behavior
stable_sort sorts by key ascending but keeps relative order of equal keys.Step 2: Sort vector and trace output
Keys sorted: 1, 2, 2. For key=2, 'a' comes before 'c' in original, so order stays '2a' then '2c'. Output: "1b 2a 2c "Final Answer:
1b 2a 2c -> Option DQuick Check:
Stable sort keeps order of equal keys [OK]
- Assuming equal keys reorder arbitrarily
- Confusing stable_sort with sort
- Ignoring the lambda comparator effect
int arr[] = {3, 1, 2};
std::stable_sort(arr, arr + 3);
for (int i = 0; i < 3; i++) std::cout << arr[i] << ' ';Solution
Step 1: Check stable_sort usage on arrays
std::stable_sort accepts pointers as iterators, so arr and arr+3 are valid.Step 2: Verify code correctness
Code sorts array {3,1,2} to {1,2,3} and prints correctly. No error present.Final Answer:
No error; code runs correctly -> Option AQuick Check:
stable_sort works with array pointers [OK]
- Thinking stable_sort needs vector only
- Assuming comparator is mandatory
- Confusing pointers with iterators
name and age. You want to sort them by age but keep the original order for employees with the same age. Which sorting algorithm should you use and why?Solution
Step 1: Understand requirement for stability
We want to keep original order for employees with same age, so sorting must be stable.Step 2: Choose sorting algorithm based on stability
Merge Sort or any stable sort preserves order of equal keys. Quick Sort, Heap Sort, Selection Sort are not stable by default.Final Answer:
Stable Sort (like Merge Sort), to preserve order of equal ages -> Option BQuick Check:
Stable sort needed to keep order [OK]
- Choosing faster but unstable sorts
- Ignoring stability requirement
- Confusing simplicity with correctness
Ready to prove it?
Pass the test and this pattern moves unknown
