Selection Sort

An intuitive, animated visualization of the Selection Sort algorithm.

Algorithm Code

Time: O(n²) | Space: O(1)

1void selectionSort(int arr[]) {
2  int n = arr.length;
3  for (int i = 0; i < n - 1; i++) {
4    int minIndex = i;
5    for (int j = i + 1; j < n; j++) {
6      if (arr[j] < arr[minIndex]) {
7        minIndex = j;
8      }
9    }
10    // Swap the found minimum element with first element
11    int temp = arr[minIndex];
12    arr[minIndex] = arr[i];
13    arr[i] = temp;
14  }
15}

Algorithm Steps

Step 1 of 53

1

Initial Array

The unsorted array.

2

Starting Pass

Starting pass 1. Looking for minimum in unsorted portion.

3

Initialize Minimum

Assume element at index 0 (64) is minimum.

4

Comparing

Comparing 34 with current minimum 64.

5

New Minimum Found

Found new minimum: 34 at index 1.

6

Comparing

Comparing 25 with current minimum 34.

7

New Minimum Found

Found new minimum: 25 at index 2.

8

Comparing

Comparing 12 with current minimum 25.

9

New Minimum Found

Found new minimum: 12 at index 3.

10

Comparing

Comparing 22 with current minimum 12.

11

Comparing

Comparing 11 with current minimum 12.

12

New Minimum Found

Found new minimum: 11 at index 5.

13

Comparing

Comparing 90 with current minimum 11.

14

Swapping

Swapping 64 with minimum 11.

15

Swapped

Swapped! 11 is now in position 0.

16

Starting Pass

Starting pass 2. Looking for minimum in unsorted portion.

17

Initialize Minimum

Assume element at index 1 (34) is minimum.

18

Comparing

Comparing 25 with current minimum 34.

19

New Minimum Found

Found new minimum: 25 at index 2.

20

Comparing

Comparing 12 with current minimum 25.

21

New Minimum Found

Found new minimum: 12 at index 3.

22

Comparing

Comparing 22 with current minimum 12.

23

Comparing

Comparing 64 with current minimum 12.

24

Comparing

Comparing 90 with current minimum 12.

25

Swapping

Swapping 34 with minimum 12.

26

Swapped

Swapped! 12 is now in position 1.

27

Starting Pass

Starting pass 3. Looking for minimum in unsorted portion.

28

Initialize Minimum

Assume element at index 2 (25) is minimum.

29

Comparing

Comparing 34 with current minimum 25.

30

Comparing

Comparing 22 with current minimum 25.

31

New Minimum Found

Found new minimum: 22 at index 4.

32

Comparing

Comparing 64 with current minimum 22.

33

Comparing

Comparing 90 with current minimum 22.

34

Swapping

Swapping 25 with minimum 22.

35

Swapped

Swapped! 22 is now in position 2.

36

Starting Pass

Starting pass 4. Looking for minimum in unsorted portion.

37

Initialize Minimum

Assume element at index 3 (34) is minimum.

38

Comparing

Comparing 25 with current minimum 34.

39

New Minimum Found

Found new minimum: 25 at index 4.

40

Comparing

Comparing 64 with current minimum 25.

41

Comparing

Comparing 90 with current minimum 25.

42

Swapping

Swapping 34 with minimum 25.

43

Swapped

Swapped! 25 is now in position 3.

44

Starting Pass

Starting pass 5. Looking for minimum in unsorted portion.

45

Initialize Minimum

Assume element at index 4 (34) is minimum.

46

Comparing

Comparing 64 with current minimum 34.

47

Comparing

Comparing 90 with current minimum 34.

48

No Swap Needed

Minimum is already in correct position.

49

Starting Pass

Starting pass 6. Looking for minimum in unsorted portion.

50

Initialize Minimum

Assume element at index 5 (64) is minimum.

51

Comparing

Comparing 90 with current minimum 64.

52

No Swap Needed

Minimum is already in correct position.

53

Sorted!

The array is fully sorted.

64
34
25
12
22
11
90
Array Size (n): 7
Current Position
Comparing
Current Minimum
Swapping
Sorted
Unsorted
Step 0 of 520%
0.25x4x