notebook/notes/algorithms/sorting/selection-sort.md

4.2 KiB

title TARGET DECK FILE TAGS tags
Selection Sort Obsidian::STEM algorithm::sorting
algorithm
sorting

Overview

Property Value
Best Case O(n^2)
Worst Case O(n^2)
Avg. Case O(n^2)
Memory O(1)
In Place Yes
Stable Yes

!selection-sort.gif

%%ANKI Basic What is selection sort's best case runtime? Back: O(n^2) Reference: Thomas H. Cormen et al., Introduction to Algorithms, 3rd ed (Cambridge, Mass: MIT Press, 2009).

END%%

%%ANKI Basic What is selection sort's worst case runtime? Back: O(n^2) Reference: Thomas H. Cormen et al., Introduction to Algorithms, 3rd ed (Cambridge, Mass: MIT Press, 2009).

END%%

%%ANKI Basic What is selection sort's average case runtime? Back: O(n^2) Reference: Thomas H. Cormen et al., Introduction to Algorithms, 3rd ed (Cambridge, Mass: MIT Press, 2009).

END%%

%%ANKI Basic Is selection sort in place? Back: Yes Reference: Thomas H. Cormen et al., Introduction to Algorithms, 3rd ed (Cambridge, Mass: MIT Press, 2009).

END%%

%%ANKI Basic Is selection sort stable? Back: Yes Reference: Thomas H. Cormen et al., Introduction to Algorithms, 3rd ed (Cambridge, Mass: MIT Press, 2009).

END%%

void swap(int i, int j, int *A) {
  int tmp = A[i];
  A[i] = A[j];
  A[j] = tmp;
}

void selection_sort(const int n, int A[static n]) {
  for (int i = 0; i < n - 1; ++i) {
	int mini = i;
    for (int j = i + 1; j < n; ++j) {
      if (A[j] < A[mini]) {
	    mini = j;
      }
    }
    swap(i, mini, A);
  }
}

%%ANKI Basic What sorting algorithm does the following demonstrate? !selection-sort.gif Back: Selection sort. Reference: Thomas H. Cormen et al., Introduction to Algorithms, 3rd ed (Cambridge, Mass: MIT Press, 2009).

END%%

Loop Invariant

Consider loop-invariant P given by

On each iteration, A[0..i-1] is a sorted array of the i least elements of A.

We prove P maintains the requisite properties:

  • Initialization
    • When i = 0, A[0..-1] is an empty array. This trivially satisfies P.
  • Maintenance
    • Suppose P holds for some 0 ≤ i < n - 1. Then A[0..i-1] is a sorted array of the i least elements of A. Our inner loop then finds the smallest element in A[i..n] and swaps it with A[i]. Therefore A[0..i] is not a sorted array of the i + 1 least elements of A. At the end of the iteration, i is incremented meaning A[0..i-1] still satisfies P.
  • Termination
    • On termination, i = n - 1 and A[0..n-2] are the n - 1 least elements of A in sorted order. But, by exhaustion, A[n-1] must be the largest element meaning A[0..n-1], the entire array, is in sorted order.

%%ANKI Basic Given array A[0..n-1], what is selection sort's loop invariant? Back: A[0..i-1] is a sorted array of the i least elements of A. Reference: Thomas H. Cormen et al., Introduction to Algorithms, 3rd ed (Cambridge, Mass: MIT Press, 2009).

END%%

%%ANKI Basic What is initialization of selection sort's loop invariant? Back: Sorting starts with an empty array which is trivially sorted. Reference: Thomas H. Cormen et al., Introduction to Algorithms, 3rd ed (Cambridge, Mass: MIT Press, 2009).

END%%

%%ANKI Basic What is maintenance of selection sort's loop invariant? Back: Each iteration puts the next least element into the sorted subarray. Reference: Thomas H. Cormen et al., Introduction to Algorithms, 3rd ed (Cambridge, Mass: MIT Press, 2009).

END%%

%%ANKI Basic How does selection sort partition its input array? Back:

[ sorted | unsorted ]

Reference: Thomas H. Cormen et al., Introduction to Algorithms, 3rd ed (Cambridge, Mass: MIT Press, 2009).

END%%

%%ANKI Basic Which element will selection sort move to sorted?

[ sorted | unsorted ]

Back: The least element in unsorted. Reference: Thomas H. Cormen et al., Introduction to Algorithms, 3rd ed (Cambridge, Mass: MIT Press, 2009).

END%%

References

  • Thomas H. Cormen et al., Introduction to Algorithms, 3rd ed (Cambridge, Mass: MIT Press, 2009).