📖 Scenario: You have a list of numbers that you want to arrange from smallest to largest, just like sorting books by their height on a shelf.
🎯 Goal: Build a program that sorts a list of numbers using the selection sort method, which finds the smallest number and puts it in the right place step by step.
📋 What You'll Learn
Create a vector called numbers with the exact values: 64, 25, 12, 22, 11
Create a variable called n that stores the length of numbers
Use a for loop with variable i from 0 to n - 1
Inside the loop, create a variable min_index set to i
Use a nested for loop with variable j from i + 1 to n
Inside the nested loop, update min_index if numbers[j] is less than numbers[min_index]
After the nested loop, swap numbers[i] and numbers[min_index]
Print the sorted numbers vector
💡 Why This Matters
🌍 Real World
Sorting is used everywhere, like organizing files, arranging products by price, or sorting names alphabetically.
💼 Career
Understanding sorting algorithms helps in software development, data analysis, and optimizing performance in many applications.
Progress0 / 4 steps
1
Create the list of numbers
Create a vector called numbers with these exact values: 64, 25, 12, 22, 11
DSA Rust
Hint
Use let mut numbers = vec![64, 25, 12, 22, 11]; to create the vector.
2
Set the length variable
Create a variable called n that stores the length of the numbers vector
DSA Rust
Hint
Use let n = numbers.len(); to get the length.
3
Implement selection sort loops
Use a for loop with variable i from 0 to n - 1. Inside it, create a variable min_index set to i. Then use a nested for loop with variable j from i + 1 to n. Inside the nested loop, update min_index if numbers[j] is less than numbers[min_index]. After the nested loop, swap numbers[i] and numbers[min_index].
DSA Rust
Hint
Use nested loops and numbers.swap(i, min_index); to swap values.
4
Print the sorted vector
Print the numbers vector after sorting using println!("{:?}", numbers);
DSA Rust
Hint
Use println!("{:?}", numbers); to print the vector.
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
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 A
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
Step 1: Recall Rust vector swap method
Rust vectors have a method called swap that takes two indices and swaps their elements.
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.
Final Answer:
a.swap(i, min_index); -> Option D
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
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 C
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
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 B
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
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 A
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 unknownstrongwhile earning +1 Grip toward your certificate.