What if you could sort your messy list by always picking the smallest piece first, step by step?
Why Selection Sort Algorithm in DSA Rust?
Imagine you have a messy pile of books on your desk, and you want to arrange them from the smallest to the biggest. You try to pick each book one by one and place it in the right order by guessing where it should go.
Doing this by guessing is slow and confusing. You might pick the wrong book or forget where you put some. It takes a lot of time and mistakes happen easily.
Selection Sort helps by always finding the smallest book left in the pile and putting it in the right place step by step. This way, you never guess, and the order grows correctly with each step.
let mut books = vec![5, 3, 8, 1]; // Guess and swap books randomly books.swap(0, 2); books.swap(1, 3);
for i in 0..books.len() { let mut min_index = i; for j in i+1..books.len() { if books[j] < books[min_index] { min_index = j; } } books.swap(i, min_index); }
It makes sorting simple and clear, so you can organize any list step by step without confusion.
Sorting a list of student scores from lowest to highest to see who needs more help.
Manual guessing is slow and error-prone.
Selection Sort finds the smallest item each time and places it correctly.
This method is easy to understand and works well for small lists.
Practice
Selection Sort Algorithm?Solution
Step 1: Understand selection sort process
Selection sort finds the smallest element in the unsorted part and swaps it with the first unsorted element.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.Final Answer:
Repeatedly find the smallest element and move it to the front -> Option AQuick Check:
Selection sort = find smallest and swap [OK]
- Confusing selection sort with bubble sort
- Thinking it divides list into halves
- Mixing it up with insertion sort
a[i] and a[min_index] in a vector a?Solution
Step 1: Recall Rust vector swap method
Rust vectors have a method calledswapthat takes two indices and swaps their elements.Step 2: Match syntax with options
a.swap(i, min_index); usesa.swap(i, min_index);which is correct. Others are invalid Rust syntax or methods.Final Answer:
a.swap(i, min_index); -> Option DQuick Check:
Rust vector swap method = a.swap(i, j) [OK]
- Trying to swap elements directly with assignment
- Using non-existent swap_elements method
- Using Python-style tuple swap syntax
vec![3, 1, 4, 2]?Solution
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]Step 2: Confirm final sorted vector
The vector is sorted ascending: [1, 2, 3, 4]Final Answer:
[1, 2, 3, 4] -> Option CQuick Check:
Selection sort output = sorted ascending [OK]
- Confusing selection sort with reverse sorting
- Stopping after first swap
- Not swapping correctly
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);
}
}Solution
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.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.Final Answer:
The outer loop should run until n-1, not n -> Option BQuick Check:
Outer loop range = 0..n-1 [OK]
- Running outer loop one step too far
- Starting inner loop incorrectly
- Misunderstanding swap method existence
Solution
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.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.Final Answer:
Run the outer loop only 3 times instead of full length -> Option AQuick Check:
Partial sort = limit outer loop iterations [OK]
- Modifying inner loop instead of outer loop
- Sorting entire vector unnecessarily
- Mixing sorting algorithms incorrectly
Ready to prove it?
Pass the test and this pattern moves unknown
