Bird
Raised Fist0
DSA Rustprogramming~5 mins

Sorting Stability and When to Use Which Sort in DSA Rust - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does it mean for a sorting algorithm to be stable?
A stable sorting algorithm keeps the original order of equal elements the same after sorting. For example, if two items have the same value, they stay in the order they appeared before sorting.
Click to reveal answer
beginner
Name a common stable sorting algorithm.
Insertion Sort is a common stable sorting algorithm. Merge Sort is also stable if implemented carefully.
Click to reveal answer
intermediate
Why might you choose a stable sort over an unstable one?
You choose a stable sort when the order of equal elements matters, like sorting a list of people first by age, then by name without mixing names of the same age.
Click to reveal answer
intermediate
Which sorting algorithms are generally unstable?
Quick Sort and Heap Sort are generally unstable, meaning they can change the order of equal elements.
Click to reveal answer
intermediate
When should you use Quick Sort over Merge Sort?
Use Quick Sort when you want faster average performance and less memory use. Use Merge Sort when you need guaranteed stable sorting or better worst-case performance.
Click to reveal answer
What does a stable sorting algorithm guarantee?
AEqual elements keep their original order
BSorting is always faster
CUses less memory
DSorts in place
Which sorting algorithm is usually unstable?
AInsertion Sort
BMerge Sort
CBubble Sort
DQuick Sort
When is it important to use a stable sort?
AWhen sorting numbers only
BWhen order of equal elements matters
CWhen speed is the only concern
DWhen memory is limited
Which sorting algorithm is known for good worst-case performance?
AMerge Sort
BHeap Sort
CQuick Sort
DSelection Sort
What is a downside of Merge Sort compared to Quick Sort?
AUses more memory
BUnstable sorting
CSlower average case
DOnly works on small arrays
Explain what sorting stability means and give an example of when you would want a stable sort.
Think about sorting a list of items with the same value but different other details.
You got /3 concepts.
    Compare Quick Sort and Merge Sort in terms of stability, performance, and memory use.
    Consider when you want speed vs when you want guaranteed order and stability.
    You got /5 concepts.

      Practice

      (1/5)
      1. What does it mean when a sorting algorithm is stable?
      easy
      A. It uses less memory than unstable sorts
      B. It sorts elements in ascending order only
      C. It always runs faster than unstable sorts
      D. It keeps the original order of equal elements unchanged

      Solution

      1. Step 1: Understand stability in sorting

        A stable sort means if two elements are equal, their order stays the same as before sorting.
      2. Step 2: Compare options with definition

        Only It keeps the original order of equal elements unchanged matches this meaning. Other options describe unrelated properties.
      3. Final Answer:

        It keeps the original order of equal elements unchanged -> Option D
      4. Quick Check:

        Stable sort = keeps equal elements order [OK]
      Hint: Stable means equal items keep their order [OK]
      Common Mistakes:
      • Confusing stability with sorting order
      • Thinking stability means faster sorting
      • Assuming stability means less memory use
      2. Which Rust standard library method sorts a slice with a stable sort without requiring a comparator closure?
      easy
      A. slice.sort_unstable_by()
      B. slice.sort_unstable()
      C. slice.sort()
      D. slice.sort_by()

      Solution

      1. Step 1: Recall Rust slice sorting methods

        Rust's slice.sort() uses a stable sorting algorithm.
      2. Step 2: Differentiate stable and unstable methods

        sort_unstable() and sort_unstable_by() are unstable sorts. sort_by() is stable but requires a comparator.
      3. Final Answer:

        slice.sort() -> Option C
      4. Quick Check:

        slice.sort() = stable sort [OK]
      Hint: Use sort() for stable sorting in Rust [OK]
      Common Mistakes:
      • Choosing sort_unstable() thinking it's stable
      • Confusing sort_by() with unstable sort
      • Not knowing sort() is stable by default
      3. Given the Rust code below, what is the output?
      let mut data = [(3, 'a'), (1, 'b'), (3, 'c'), (2, 'd')];
      data.sort();
      println!("{:?}", data);
      medium
      A. [(1, 'b'), (2, 'd'), (3, 'a'), (3, 'c')]
      B. [(1, 'b'), (2, 'd'), (3, 'c'), (3, 'a')]
      C. [(3, 'a'), (3, 'c'), (2, 'd'), (1, 'b')]
      D. [(2, 'd'), (1, 'b'), (3, 'a'), (3, 'c')]

      Solution

      1. Step 1: Understand sorting of tuples in Rust

        Rust sorts tuples by first element, then second if first are equal. Here, sorting by integer first.
      2. Step 2: Apply stable sort to keep order of equal keys

        Elements with key 3 are (3, 'a') then (3, 'c'). Stable sort keeps this order.
      3. Final Answer:

        [(1, 'b'), (2, 'd'), (3, 'a'), (3, 'c')] -> Option A
      4. Quick Check:

        Stable sort keeps (3, 'a') before (3, 'c') [OK]
      Hint: Stable sort keeps equal keys in original order [OK]
      Common Mistakes:
      • Swapping order of equal keys
      • Ignoring tuple sorting rules
      • Assuming unstable sort by default
      4. The following Rust code uses sort_unstable() but the order of equal elements is important. What is the main issue?
      let mut items = [(2, 'x'), (1, 'y'), (2, 'z')];
      items.sort_unstable();
      println!("{:?}", items);
      medium
      A. The code will not compile because sort_unstable() requires a comparator
      B. The order of (2, 'x') and (2, 'z') may change, breaking stability
      C. The code will panic at runtime due to unstable sort
      D. The output will always be sorted and stable

      Solution

      1. Step 1: Understand sort_unstable() behavior

        sort_unstable() sorts faster but does not guarantee stable order of equal elements.
      2. Step 2: Identify problem with equal keys

        Elements with key 2 may swap order, so (2, 'x') and (2, 'z') order can change, which breaks stability.
      3. Final Answer:

        The order of (2, 'x') and (2, 'z') may change, breaking stability -> Option B
      4. Quick Check:

        Unstable sort = order of equal keys can change [OK]
      Hint: Unstable sort can reorder equal elements [OK]
      Common Mistakes:
      • Thinking unstable sort always panics
      • Assuming unstable sort requires comparator
      • Believing unstable sort keeps order
      5. You have a list of student records with fields (score: i32, name: &str). You want to sort by score ascending but keep the original order of students with the same score. Which sorting method should you use in Rust and why?
      hard
      A. Use sort() because it is stable and preserves order of equal scores
      B. Use sort_unstable() because it is faster and order doesn't matter
      C. Use sort_unstable_by() with a custom comparator for stability
      D. Use sort_by() but it is unstable so order may change

      Solution

      1. Step 1: Identify requirement for stability

        We want to keep original order of students with same score, so stable sort is needed.
      2. Step 2: Choose Rust method that is stable

        sort() is stable and sorts ascending by default. sort_unstable() is faster but unstable. sort_unstable_by() is unstable even with comparator. sort_by() is stable but Use sort_by() but it is unstable so order may change claims it is unstable incorrectly.
      3. Final Answer:

        Use sort() because it is stable and preserves order of equal scores -> Option A
      4. Quick Check:

        Stable sort needed = use sort() [OK]
      Hint: Stable sort keeps order of equal keys; use sort() [OK]
      Common Mistakes:
      • Choosing unstable sort for speed ignoring order
      • Thinking sort_unstable_by() is stable
      • Misunderstanding sort_by() stability
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard