C Program to Sort an Array Using Selection Sort
C Program to Sort an Array Using Selection Sort
A class stores five marks in their original order: 40, 35, 45, 35 and 50. The selection sort task needs a clear rule about order, duplicates and how many elements exist.
Selection Sort orders a sequence through a defined comparison and preserves its elements, including duplicates.
Before this exercise, review array elements and bounds and function parameters. The worked program below applies those ideas to this specific problem.
Explain
Explain why selection sort uses this sequence of operations.
Trace
Trace the sample values and predict the printed result.
Apply
Order the same marks in the opposite direction using the worked insertion approach.
Selection Sort: follow the data
Given data
A class stores five marks in their original order: 40, 35, 45, 35 and 50. The selection sort task needs a clear rule about order, duplicates and how many elements exist.
Rule
Selection Sort orders a sequence through a defined comparison and preserves its elements, including duplicates.
Observed result
35 35 40 45 50
Understand the operation
Find the smallest value in the unsorted suffix, then swap it into the suffix’s first position. The completed prefix is ordered.
The complete example knows its five-element bound. In a reusable function, pass an explicit element count with the array pointer; a pointer alone does not report that bound. This sample has two equal marks, which makes duplicate handling observable.
Read the complete C program
The input values are written into this complete C17 example so the calculation can be reproduced without an unavailable service. Change the named data, rebuild and compare the actual output with your prediction.
C17 · complete program
#include <stdio.h>
int main(void) {
int marks[] = {40, 35, 45, 35, 50};
int count = (int)(sizeof marks / sizeof marks[0]);
for (int start = 0; start < count - 1; start++) {
int smallest = start;
for (int i = start + 1; i < count; i++) if (marks[i] < marks[smallest]) smallest = i;
int saved = marks[start]; marks[start] = marks[smallest]; marks[smallest] = saved;
}
for (int i = 0; i < count; i++) printf("%d%s", marks[i], i == count - 1 ? "\n" : " ");
return 0;
}
Expected output
35 35 40 45 50
Run in C compiler →Follow the values through the code
C17 · code used in this explanation
#include <stdio.h>
int main(void) {
int marks[] = {40, 35, 45, 35, 50};
int count = (int)(sizeof marks / sizeof marks[0]);
for (int start = 0; start < count - 1; start++) {
int smallest = start;
for (int i = start + 1; i < count; i++) if (marks[i] < marks[smallest]) smallest = i;
int saved = marks[start]; marks[start] = marks[smallest]; marks[smallest] = saved;
}
for (int i = 0; i < count; i++) printf("%d%s", marks[i], i == count - 1 ? "\n" : " ");
return 0;
}
The first pass selects a 35 for position zero. Later passes choose the next smallest remaining candidate.
Compare the resulting output with the original sequence. A changed order and a changed set of values are different effects; decide which your operation promises.
Follow the worked calculation
Start with the sample
The first pass selects a 35 for position zero. Later passes choose the next smallest remaining candidate.
Apply the rule
Compare the resulting output with the original sequence. A changed order and a changed set of values are different effects; decide which your operation promises.
Check the result
35 35 40 45 50
35 35 40 45 50
Try a small variation
C17 · code used in this explanation
#include <stdio.h>
int main(void) {
int marks[] = {40, 35, 45, 35, 50};
int count = (int)(sizeof marks / sizeof marks[0]);
for (int start = 0; start < count - 1; start++) {
int smallest = start;
for (int i = start + 1; i < count; i++) if (marks[i] < marks[smallest]) smallest = i;
int saved = marks[start]; marks[start] = marks[smallest]; marks[smallest] = saved;
}
for (int i = 0; i < count; i++) printf("%d%s", marks[i], i == count - 1 ? "\n" : " ");
return 0;
}
Order the same marks in the opposite direction using the worked insertion approach.
Worked answer
The worked answer changes the comparison direction while keeping the valid indexes and element count. Equal marks remain present; sorting is not duplicate removal.
C17 · complete program
#include <stdio.h>
int main(void) {
int marks[] = {40, 35, 45, 35, 50};
int count = (int)(sizeof marks / sizeof marks[0]);
for (int i = 1; i < count; i++) {
int value = marks[i], j = i;
while (j > 0 && marks[j - 1] < value) { marks[j] = marks[j - 1]; j--; }
marks[j] = value;
}
for (int i = 0; i < count; i++) printf("%d%s", marks[i], i == count - 1 ? "\n" : " ");
return 0;
}
Expected output
50 45 40 35 35
Run in C compiler →Recognize the important boundaries
Selection sort uses quadratic comparisons and is generally not stable because swapping distant elements can reorder equal records.
The sample marks and their sums fit int. General input requires both valid array bounds and an arithmetic-range contract.
Check your understanding
Choose the answer, then compare the reasoning for every option.
Check your understanding
Choose the answer, then compare the reasoning for every option.
Use the idea independently
Selection Sort orders a sequence through a defined comparison and preserves its elements, including duplicates.
Continue with array indexes and bounds.
Continue with pointer and count contracts.
Language reference: WG14 C11 committee draft. These examples use the C17-compatible subset of the explained language features.
Reaching the recap and completing the quizzes are separate milestones.