23
Faster Sorting Methods Chapter 12

Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

Embed Size (px)

Citation preview

Page 1: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

Faster Sorting Methods

Chapter 12

Page 2: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

2

Chapter ContentsMerge 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

Page 3: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

3

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

Page 4: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

4

Merge Sort

Fig. 12-1 Merging two sorted arrays

into one sorted array.

Page 5: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

5

Merge Sort

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

Page 6: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

6

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]

}

Page 7: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

7

Merge Sort

Fig. 12-3 The effect of the recursive calls and the merges during a merge sort.

Page 8: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

8

Merge SortEfficiency 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);

Page 9: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

9

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

Page 10: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

10

Quick Sort

Algorithm quickSort(a, first, last)

// Sorts the array elements a[first] through a[last] recursively.

if (first < last)

{ Choose a pivotPartition the array about the pivotpivotIndex = index of pivotquickSort(a, first, pivotIndex-1) // sort SmallerquickSort(a, pivotIndex+1, last) // sort Larger

}

Page 11: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

11

Quick Sort

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

Page 12: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

12

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

Page 13: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

13

Quick Sort

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

Page 14: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

14

Quick Sort

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

Page 15: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

15

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

Page 16: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

16

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.

Page 17: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

17

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

Page 18: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

18

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

Page 19: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

19

Radix Sort

Fig. 12-8 (a) Original array and buckets after first distribution; (b) reordered array and buckets after second

distribution … continued →

Page 20: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

20

Radix Sort

Fig. 12-8 (c) reordered array and buckets after third distribution; (d) sorted array

Page 21: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

21

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){ Clear bucket[0], bucket[1], . . . , bucket[9]

for (index = first to last){ digit = ith digit from the right of a[index]

Place a[index] at end of bucket[digit]}Place contents of bucket[0], bucket[1], . . . , bucket[9] into the array a

}

Radix sort is O(n) but can only be used for certain

kinds of data

Radix sort is O(n) but can only be used for certain

kinds of data

Page 22: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

22

Comparing the Algorithms

Fig. 12-9 The time efficiency of various algorithms in Big Oh notation

Page 23: Faster Sorting Methods Chapter 12. 2 Chapter Contents Merge Sort Merging Arrays Recursive Merge Sort The Efficiency of Merge Sort Iterative Merge Sort

23

Comparing the Algorithms

Fig. 12-10 A comparison of growth-rate functions as n increases.