O(n2) Sorts

COMP2521 20T2 ♢ O(n2) Sorts [0/22]
❖ O(n2) Sorting Algorithms


One class of sorting methods has complexity O(n2)

There are sorting methods with better complexity O(n log n)

But for small arrays, the above methods are adequate

COMP2521 20T2 ♢ O(n2) Sorts [1/22]
❖ Selection Sort


Simple, non-adaptive method:

"Put in xth array slot" is accomplished by: Each iteration improves "sortedness" by one element
COMP2521 20T2 ♢ O(n2) Sorts [2/22]
❖ ... Selection Sort

State of array after each iteration:

[Diagram:Pics/sel-sort.png]

COMP2521 20T2 ♢ O(n2) Sorts [3/22]
❖ ... Selection Sort

C function for Selection sort:

void selectionSort(int a[], int lo, int hi)
{
   int i, j, min;
   for (i = lo; i <= hi-1; i++) {
      min = i;
      for (j = i+1; j <= hi; j++) {
         if (less(a[j],a[min])) min = j;
      }
      swap(a[i], a[min]);
   }
}

COMP2521 20T2 ♢ O(n2) Sorts [4/22]
❖ ... Selection Sort


Cost analysis (where n = hi-lo+1):

Cost is same, regardless of sortedness of original array.
COMP2521 20T2 ♢ O(n2) Sorts [5/22]
❖ Bubble Sort

Simple adaptive method:

COMP2521 20T2 ♢ O(n2) Sorts [6/22]
❖ ... Bubble Sort


[Diagram:Pics/bubbles.png]

COMP2521 20T2 ♢ O(n2) Sorts [7/22]
❖ ... Bubble Sort

State of array after each iteration:

[Diagram:Pics/bub0-sort.png]

COMP2521 20T2 ♢ O(n2) Sorts [8/22]
❖ ... Bubble Sort

Bubble sort example  (from Sedgewick):

S O R T E X A M P L E
A S O R T E X E M P L
A E S O R T E X L M P
A E E S O R T L X M P
A E E L S O R T M X P
A E E L M S O R T P X
A E E L M O S P R T X
A E E L M O P S R T X
A E E L M O P R S T X
... no swaps ⇒ done ...
A E E L M O P R S T X

COMP2521 20T2 ♢ O(n2) Sorts [9/22]
❖ ... Bubble Sort

C function for Bubble Sort:

void bubbleSort(int a[], int lo, int hi)
{
   int i, j, nswaps;
   for (i = lo; i < hi; i++) {
      nswaps = 0;
      for (j = hi; j > i; j--) {
         if (less(a[j], a[j-1])) {
            swap(a[j], a[j-1]);
            nswaps++;
         }
      }
      if (nswaps == 0) break;
   }
}

COMP2521 20T2 ♢ O(n2) Sorts [10/22]
❖ ... Bubble Sort

Cost analysis (where n = hi-lo+1):

COMP2521 20T2 ♢ O(n2) Sorts [11/22]
❖ Insertion Sort


Simple adaptive method:

COMP2521 20T2 ♢ O(n2) Sorts [12/22]
❖ ... Insertion Sort

[Diagram:Pics/ins-sort.png]

COMP2521 20T2 ♢ O(n2) Sorts [13/22]
❖ ... Insertion Sort

Insertion sort example  (from Sedgewick):

S O R T E X A M P L E
S O R T E X A M P L E
O S R T E X A M P L E
O R S T E X A M P L E
O R S T E X A M P L E
E O R S T X A M P L E
E O R S T X A M P L E
A E O R S T X M P L E
A E M O R S T X P L E
A E M O P R S T X L E
A E L M O P R S T X E
A E E L M O P R S T X

COMP2521 20T2 ♢ O(n2) Sorts [14/22]
❖ ... Insertion Sort

C function for insertion sort:

void insertionSort(int a[], int lo, int hi)
{
   int i, j, val;
   for (i = lo+1; i <= hi; i++) {
      val = a[i];
      for (j = i; j > lo; j--) {
         if (!less(val,a[j-1])) break;
         a[j] = a[j-1];
      }
      a[j] = val;
   }
}

COMP2521 20T2 ♢ O(n2) Sorts [15/22]
❖ ... Insertion Sort

Cost analysis (where n = hi-lo+1):

COMP2521 20T2 ♢ O(n2) Sorts [16/22]
❖ ShellSort: Improving Insertion Sort

Insertion sort:

Shellsort: basic idea
COMP2521 20T2 ♢ O(n2) Sorts [17/22]
❖ ... ShellSort: Improving Insertion Sort

Example h-sorted arrays:

[Diagram:Pics/h-sorted.png]

COMP2521 20T2 ♢ O(n2) Sorts [18/22]
❖ ... ShellSort: Improving Insertion Sort


void shellSort(int a[], int lo, int hi)
{
   int hvals[8] = {701, 301, 132, 57, 23, 10, 4, 1};
   int g, h, start, i, j, val;
   for (g = 0; g < 8; g++) {
      h = hvals[g];
      start = lo + h;
      for (i = start; i <= hi; i++) {
         val = a[i];
         for (j = i; j >= start; j -= h) {
            if (!less(val,a[j-h]) break;
            a[j] = a[j-h];
         }
         a[j] = val;
      }
   }
}

COMP2521 20T2 ♢ O(n2) Sorts [19/22]
❖ ... ShellSort: Improving Insertion Sort


Effective sequences of h values have been determined empirically.

E.g. hi+i = 3hi+1 ... 1093, 364, 121, 40, 13, 4, 1

Efficiency of Shellsort:

COMP2521 20T2 ♢ O(n2) Sorts [20/22]
❖ Summary of Elementary Sorts

Comparison of sorting algorithms  (animated comparison)

  #compares #swaps #moves
  minavgmax minavgmax minavgmax
Selection sort n2 n2n2 n nn ...
Bubble sort n n2n2 0 n2n2 ...
Insertion sort n n2n2 ... n n2n2
Shell sort n n4/3n4/3 ... 1 n4/3n4/3

Which is best?

COMP2521 20T2 ♢ O(n2) Sorts [21/22]
❖ Sorting Linked Lists

Selection sort on linked lists

Bubble sort on linked lists Selection sort on linked lists
COMP2521 20T2 ♢ O(n2) Sorts [22/22]


Produced: 8 Apr 2022