3. Naïve Sorting
for i=1 to n-1
{ for j=0 to n-i-1
if (A[j].compareTo(A[j+1])>0)
swap(A[j], A[j+1]);
if (no swaps) break;
}
• What happens if
– All keys are equal?
– Keys are sorted in reverse order?
– Keys are sorted?
– keys are randomly distributed?
• Exercise: Count the number of operations in bubble sort
and find a Big O analysis for bubble sort
5. Insertion sort
• Algorithm
for i = 1 to n-1 do
insert a[i] in the proper place
in a[0:i-1]
• Correctness
•Note: after i steps, the sub-array A[0:i] is
sorted
6. How fast is insertion sort?
# of slides = O(#inversions)
very fast if array is nearly sorted to begin with
tmp = a[i];
for (j = i; j>0 && a[j-1]>tmp; j--)
a[j] = a[j-1];
a[j] = tmp;
To insert a[i] into a[0:i-1], slide all elements larger
than a[i] to the right.
7. Selection sort
• Algorithm
for i = n-1 to 1 do
Find the largest entry in the
in the subarray A[0:i]
Swap with A[i]
What is the runtime complexity of
selection sort?
10. Quick Sort
• Fastest algorithm in practice
• Algorithm
– Find a pivot
– Move all elements smaller than pivot to left
– Move all elements bigger than pivot to right
– Recursively sort each half
– O(n log n) algorithm
11. Merge Sort
• Divide the array into two equal halves
• Divide each half recursively until each
array is of size 1
• Merge two (sorted) arrays of size 1
• Complete the process recursively
12. Heap Sort
• Build a max heap
• Delete Max (attach to end of array) until
heap is empty
• Resulting array is sorted
• Complexity
14. Bucket sort
• In addition to comparing pairs of elements,
we require these additional restrictions:
– all elements are non-negative integers
– all elements are less than a predetermined
maximum value
• Elements are usually keys paired with other
data
16. Bucket sort characteristics
• Runs in O(N) time.
• Easy to implement each bucket as a linked
list.
• Is stable:
– If two elements (A,B) are equal with respect to
sorting, and they appear in the input in order
(A,B), then they remain in the same order in the
output.
18. Radix sort
• If your integers are in a larger range then
do bucket sort on each digit
• Start by sorting with the low-order digit
using a STABLE bucket sort.
• Then, do the next-lowest,and so on
20. Radix sort characteristics
• Each sorting step can be performed via
bucket sort, and is thus O(N).
• If the numbers are all b bits long, then
there are b sorting steps.
• Hence, radix sort is O(bN).