Bird
Raised Fist0
DSA Rustprogramming~20 mins

Selection Sort Algorithm in DSA Rust - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Selection Sort Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Selection Sort on a small array
What is the output of the following Rust code after performing selection sort on the array?
DSA Rust
fn selection_sort(arr: &mut [i32]) {
    let n = arr.len();
    for i in 0..n {
        let mut min_index = i;
        for j in (i + 1)..n {
            if arr[j] < arr[min_index] {
                min_index = j;
            }
        }
        arr.swap(i, min_index);
    }
}

fn main() {
    let mut data = [64, 25, 12, 22, 11];
    selection_sort(&mut data);
    println!("{:?}", data);
}
A[25, 11, 12, 22, 64]
B[64, 25, 12, 22, 11]
C[11, 22, 12, 25, 64]
D[11, 12, 22, 25, 64]
Attempts:
2 left
💡 Hint
Selection sort finds the smallest element and places it at the start, then repeats for the rest.
🧠 Conceptual
intermediate
1:30remaining
Number of swaps in selection sort
For an array of 5 elements, how many swaps does the selection sort algorithm perform in the worst case?
A4
B5
C10
D0
Attempts:
2 left
💡 Hint
Selection sort swaps only once per outer loop iteration if needed.
🔧 Debug
advanced
2:00remaining
Identify the bug in this selection sort implementation
What error does the following Rust code produce when run?
DSA Rust
fn selection_sort(arr: &mut [i32]) {
    let n = arr.len();
    for i in 0..n {
        let mut min_index = i;
        for j in i..n {
            if arr[j] < arr[min_index] {
                min_index = j;
            }
        }
        arr.swap(i, min_index);
    }
}

fn main() {
    let mut data = [3, 1, 2];
    selection_sort(&mut data);
    println!("{:?}", data);
}
ANo error, output: [1, 2, 3]
BPanic at runtime due to out of bounds indexing
CInfinite loop
DCompilation error: mismatched types
Attempts:
2 left
💡 Hint
Check the inner loop range carefully.
❓ Predict Output
advanced
2:00remaining
Selection sort on a reversed array
What is the output of the following Rust code after sorting the reversed array?
DSA Rust
fn selection_sort(arr: &mut [i32]) {
    let n = arr.len();
    for i in 0..n {
        let mut min_index = i;
        for j in (i + 1)..n {
            if arr[j] < arr[min_index] {
                min_index = j;
            }
        }
        arr.swap(i, min_index);
    }
}

fn main() {
    let mut data = [5, 4, 3, 2, 1];
    selection_sort(&mut data);
    println!("{:?}", data);
}
A[1, 3, 2, 4, 5]
B[1, 2, 3, 4, 5]
C[5, 4, 3, 2, 1]
D[2, 1, 3, 4, 5]
Attempts:
2 left
💡 Hint
Selection sort always sorts in ascending order.
🧠 Conceptual
expert
1:30remaining
Time complexity of selection sort
What is the time complexity of selection sort in all cases (best, average, worst)?
AO(n) best, O(n^2) worst
BO(n log n) best, O(n^2) worst
CO(n^2) for all cases
DO(n) for all cases
Attempts:
2 left
💡 Hint
Selection sort always scans the entire unsorted part to find the minimum.

Practice

(1/5)
1. What is the main idea behind the Selection Sort Algorithm?
easy
A. Repeatedly find the smallest element and move it to the front
B. Divide the list into halves and sort each half separately
C. Swap adjacent elements if they are in wrong order
D. Insert each element into its correct position in a sorted sublist

Solution

  1. Step 1: Understand selection sort process

    Selection sort finds the smallest element in the unsorted part and swaps it with the first unsorted element.
  2. Step 2: Compare with options

    Repeatedly find the smallest element and move it to the front matches this description exactly, others describe different sorting methods.
  3. Final Answer:

    Repeatedly find the smallest element and move it to the front -> Option A
  4. Quick Check:

    Selection sort = find smallest and swap [OK]
Hint: Selection sort always picks smallest next element [OK]
Common Mistakes:
  • Confusing selection sort with bubble sort
  • Thinking it divides list into halves
  • Mixing it up with insertion sort
2. Which of the following is the correct Rust syntax to swap two elements a[i] and a[min_index] in a vector a?
easy
A. a.swap_elements(i, min_index);
B. swap(a[i], a[min_index]);
C. a[i], a[min_index] = a[min_index], a[i];
D. a.swap(i, min_index);

Solution

  1. Step 1: Recall Rust vector swap method

    Rust vectors have a method called swap that takes two indices and swaps their elements.
  2. Step 2: Match syntax with options

    a.swap(i, min_index); uses a.swap(i, min_index); which is correct. Others are invalid Rust syntax or methods.
  3. Final Answer:

    a.swap(i, min_index); -> Option D
  4. Quick Check:

    Rust vector swap method = a.swap(i, j) [OK]
Hint: Use vector.swap(index1, index2) to swap elements [OK]
Common Mistakes:
  • Trying to swap elements directly with assignment
  • Using non-existent swap_elements method
  • Using Python-style tuple swap syntax
3. What will be the output vector after running selection sort on vec![3, 1, 4, 2]?
medium
A. [1, 3, 2, 4]
B. [4, 3, 2, 1]
C. [1, 2, 3, 4]
D. [2, 1, 3, 4]

Solution

  1. Step 1: Perform selection sort step-by-step

    Initial vector: [3, 1, 4, 2] - Find smallest (1), swap with first element: [1, 3, 4, 2] - Find smallest in remaining (3,4,2) is 2, swap with second element: [1, 2, 4, 3] - Find smallest in last two (4,3) is 3, swap with third element: [1, 2, 3, 4]
  2. Step 2: Confirm final sorted vector

    The vector is sorted ascending: [1, 2, 3, 4]
  3. Final Answer:

    [1, 2, 3, 4] -> Option C
  4. Quick Check:

    Selection sort output = sorted ascending [OK]
Hint: Selection sort outputs sorted ascending list [OK]
Common Mistakes:
  • Confusing selection sort with reverse sorting
  • Stopping after first swap
  • Not swapping correctly
4. Consider this Rust code snippet for selection sort. What is the bug?
fn selection_sort(a: &mut Vec<i32>) {
    let n = a.len();
    for i in 0..=n {
        let mut min_index = i;
        for j in i+1..n {
            if a[j] < a[min_index] {
                min_index = j;
            }
        }
        a.swap(i, min_index);
    }
}
medium
A. min_index should be initialized to 0, not i
B. The outer loop should run until n-1, not n
C. The swap method does not exist for vectors
D. The inner loop should start from 0, not i+1

Solution

  1. Step 1: Analyze loop ranges

    The outer loop runs from 0 to n inclusive, meaning it runs n+1 times. But the last element does not need to be checked because it will already be sorted.
  2. Step 2: Correct loop range for outer loop

    The outer loop should run from 0 to n-1 to avoid unnecessary iteration and potential out-of-bound errors.
  3. Final Answer:

    The outer loop should run until n-1, not n -> Option B
  4. Quick Check:

    Outer loop range = 0..n-1 [OK]
Hint: Outer loop runs to n-1, not n [OK]
Common Mistakes:
  • Running outer loop one step too far
  • Starting inner loop incorrectly
  • Misunderstanding swap method existence
5. You want to sort a vector of integers but only partially: you want the first 3 smallest elements sorted at the front, and the rest can remain unsorted. How can you modify selection sort to do this efficiently?
hard
A. Run the outer loop only 3 times instead of full length
B. Run the inner loop only 3 times for each outer iteration
C. Sort the entire vector then shuffle last elements randomly
D. Use bubble sort for first 3 elements and selection sort for rest

Solution

  1. Step 1: Understand partial sorting requirement

    We only want the first 3 smallest elements sorted at the front, so we only need to find and place the smallest element 3 times.
  2. Step 2: Modify selection sort outer loop

    By running the outer loop 3 times, selection sort will place the 3 smallest elements in order at the front, leaving the rest unsorted.
  3. Final Answer:

    Run the outer loop only 3 times instead of full length -> Option A
  4. Quick Check:

    Partial sort = limit outer loop iterations [OK]
Hint: Limit outer loop to number of elements to sort [OK]
Common Mistakes:
  • Modifying inner loop instead of outer loop
  • Sorting entire vector unnecessarily
  • Mixing sorting algorithms incorrectly
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