Chapter 12

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 23

Faster Sorting Methods

Chapter 12
Chapter Contents
Merge Sort
• Merging Arrays
• Recursive Merge Sort
• The Efficiency of Merge Sort
• Iterative Merge Sort
• Merge Sort in the Java Class Library
Quick Sort
• The Efficiency of Quick Sort
• Creating the Partition
• Java Code for Quick Sort
• Quick Sort in the Java Class Library
Radix Sort
• Pseudocode for Radix Sort
Comparing the Algorithms
2
Merge Sort
Divide an array into halves
• Sort the two halves
• Merge them into one sorted array

Referred to as a divide and conquer


algorithm
• This is often part of a recursive algorithm
• However recursion is not a requirement

3
Merge Sort

Fig. 12-1
Merging two
sorted arrays
into one sorted
array.

4
Merge Sort

Fig. 12-2 The major steps in a merge sort.

5
Merge Sort
Algorithm mergeSort(a, first, last)
// Sorts the array elements a[first] through a[last] recursively.
if (first < last)
{
mid = (first + last)/2
mergeSort(a, first, mid)
mergeSort(a, mid+1, last)
Merge the sorted halves a[first..mid] and a[mid+1..last]
}

6
Merge Sort

Fig. 12-3 The effect of the recursive calls and the


7
merges during a merge sort.
Merge Sort
Efficiency of the merge sort
• Merge sort is O(n log n) in all cases
• It's need for a temporary array is a
disadvantage
Merge sort in the Java Class Library
• The class Arrays has sort routines that
uses the merge sort for arrays of objects

public static void sort(Object[] a);


public static void sort(Object[] a, int first, int last);
8
Quick Sort
Divides the array into two pieces
• Not necessarily halves of the array
• An element of the array is selected as the pivot

Elements are rearranged so that:


• The pivot is in its final position in sorted array
• Elements in positions before pivot are less
than the pivot
• Elements after the pivot are greater than the
pivot
9
Quick Sort
Algorithm quickSort(a, first, last)
// Sorts the array elements a[first] through a[last] recursively.
if (first < last)
{ Choose a pivot
Partition the array about the pivot
pivotIndex = index of pivot
quickSort(a, first, pivotIndex-1) // sort Smaller
quickSort(a, pivotIndex+1, last) // sort Larger
}

10
Quick Sort

Fig. 12-4 A partition of an array during a quick sort.

11
Quick Sort

Quick sort is O(n log n) in the average


case
O(n2) in the worst case
Worst case can be avoided by careful
choice of the pivot

12
Quick Sort

Fig. 12-5 A partition strategy for quick sort … continued→


13
Quick Sort

Fig. 12-5 (ctd.) A partition strategy for quick sort.


14
Quick Sort

Fig. 12-6 Median-of-three pivot selection:


(a) the original array; (b) the array with its
first, middle, and last elements sorted
15
Quick Sort

Fig. 12-7 (a) The array with its first, middle, and
last elements sorted; (b) the array after
positioning the pivot and just before partitioning.
16
Quick Sort
Quick sort rearranges the elements in an
array during partitioning process
After each step in the process
• One element (the pivot) is placed in its correct
sorted position
The elements in each of the two sub arrays
• Remain in their respective subarrays

The class Arrays in the Java Class Library


uses quick sort for arrays of primitive types
17
Radix Sort
Does not compare objects
Treats array elements as if they were
strings of the same length
Groups elements by a specified digit or
character of the string
• Elements placed into "buckets" which match
the digit (character)
Originated with card sorters when
computers used 80 column punched cards
18
Radix Sort

Fig. 12-8 (a) Original array and buckets after first


distribution; (b) reordered array and buckets after second
19
distribution … continued →
Radix Sort

Fig. 12-8 (c) reordered array and buckets after third


distribution; (d) sorted array 20
Radix Sort
Pseudo code
Algorithm radixSort(a, first, last, maxDigits)
// Sorts the array of positive decimal integers a[first..last] into ascending order;
// maxDigits is the number of digits in the longest integer.
for (i = 1 to maxDigits) Radix sort isisO(n) but can
Radix
{ Clear bucket[0], bucket[1], . . . , bucket[9] sort O(n) but can
for (index = first to last) only
onlybe beused
usedfor for certain
certain
{ digit = ith digit from the right of a[index] kinds
kindsof of data
data
Place a[index] at end of bucket[digit]
}
Place contents of bucket[0], bucket[1], . . . , bucket[9] into the array a
}

21
Comparing the Algorithms

Fig. 12-9 The time efficiency of various


algorithms in Big Oh notation
22
Comparing the Algorithms

Fig. 12-10 A comparison of growth-rate


functions as n increases.

23

You might also like