data structures using java1 chapter 9 sorting algorithms

62
Data Structures Using Jav a 1 Chapter 9 Sorting Algorithms

Upload: meredith-hensley

Post on 18-Jan-2018

245 views

Category:

Documents


0 download

DESCRIPTION

Data Structures Using Java3 Selection Sort Selection Sort Methodology: 1.Find smallest (or equivalently largest) element in the list 2.Move it to the beginning (or end) of the list by swapping it with element in beginning (or end) position

TRANSCRIPT

Page 1: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 1

Chapter 9

Sorting Algorithms

Page 2: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 2

Chapter Objectives

• Learn the various sorting algorithms• Explore how to implement the selection, insertion,

quick, merge, and heap sorting algorithms• Discover how the sorting algorithms discussed in

this chapter perform• Learn how priority queues are implemented

Page 3: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 3

Selection Sort

Selection Sort Methodology: 1. Find smallest (or equivalently largest)

element in the list2. Move it to the beginning (or end) of the list

by swapping it with element in beginning (or end) position

Page 4: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 4

class OrderedArrayList

public class OrderedArrayList extends ArrayListClass{

public void selectionSort(); {

//statements}...

};

Page 5: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 5

Smallest Element in List Function

private int minLocation(int first, int last){ int loc, minIndex; minIndex = first; for(loc = first + 1; loc <= last; loc++) if(list[loc] < list[minIndex]) minIndex = loc; return minIndex;}//end minLocation

Page 6: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 6

Swap Functionprivate void swap(int first, int second){ DataElement temp; temp = list[first]; list[first] = list[second]; list[second] = temp;}//end swap

Page 7: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 7

Selection Sort Functionpublic void selectionSort(){ int loc, minIndex; for(loc = 0; loc < length; loc++) { minIndex = minLocation(loc, length - 1); swap(loc, minIndex); }}

Page 8: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 8

Selection Sort Example: Array-Based Lists

Page 9: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 9

Selection Sort Example: Array-Based Lists

Page 10: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 10

Selection Sort Example: Array-Based Lists

Page 11: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 11

Selection Sort Example: Array-Based Lists

Page 12: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 12

Analysis: Selection Sort

Page 13: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 13

Insertion Sort

• Reduces number of key comparisons made in selection sort

• Can be applied to both arrays and linked lists (examples follow)

• Methodology– Find first unsorted element in list– Move it to its proper position

Page 14: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 14

Insertion Sort: Array-Based Lists

Page 15: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 15

Insertion Sort: Array-Based Lists

Page 16: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 16

Insertion Sort: Array-Based Lists

Page 17: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 17

Insertion Sort: Array-Based Lists

Page 18: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 18

Insertion Sort: Array-Based Listsfor(firstOutOfOrder = 1; firstOutOfOrder < length; firstOutOfOrder++) if(list[firstOutOfOrder] is less than list[firstOutOfOrder - 1]) { copy list[firstOutOfOrder] into temp initialize location to firstOutOfOrder do { a. move list[location - 1] one array slot down b. decrement location by 1 to consider the next element of the sorted portion of the array } while(location > 0 && the element in the upper sublist at location - 1 is greater than temp) }copy temp into list[location]

Page 19: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 19

Insertion Sort: Array-Based Lists

Page 20: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 20

Insertion Sort: Array-Based Lists

Page 21: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 21

Insertion Sort: Array-Based Lists

Page 22: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 22

Insertion Sort: Array-Based Listspublic void insertionSort(){ int unsortedIndex, location; DataElement temp; for(unsortedIndex = 1; unsortedIndex < length; unsortedIndex++) if(list[unsortedIndex].compareTo(list[unsortedIndex - 1]) < 0) { temp = list[unsortedIndex]; location = unsortedIndex; do { list[location] = list[location - 1]; location--; }while(location > 0 && list[location - 1].compareTo(temp) > 0); list[location] = temp; }}//end insertionSort

Page 23: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 23

Insertion Sort: Linked List-Based List

Page 24: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 24

Insertion Sort: Linked List-Based List

if(firstOutOfOrder.info is less than first.info) move firstOutOfOrder before firstelse{ set trailCurrent to first set current to the second node in the list //search the list while(current.info is less than firstOutOfOrder.info) { advance trailCurrent; advance current; } if(current is not equal to firstOutOfOrder) { //insert firstOutOfOrder between current and trailCurrent lastInOrder.link = firstOutOfOrder.link; firstOutOfOrder.link = current; trailCurrent.link = firstOutOfOrder; } else //firstOutOfOrder is already at the first place lastInOrder = lastInOrder.link;}

Page 25: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 25

Insertion Sort: Linked List-Based List

Page 26: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 26

Insertion Sort: Linked List-Based List

Page 27: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 27

Insertion Sort: Linked List-Based List

Page 28: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 28

Insertion Sort: Linked List-Based List

Page 29: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 29

Analysis: Insertion Sort

Page 30: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 30

Lower Bound on Comparison-Based Sort Algorithms

• Trace execution of comparison-based algorithm by using graph called comparison tree

• Let L be a list of n distinct elements, where n > 0. For any j and k, where 1 = j, k = n, either L[j] < L[k] or L[j] > L[k]

• Each comparison of the keys has two outcomes; comparison tree is a binary tree

• Each comparison is a circle, called a node • Node is labeled as j:k, representing comparison of L[j]

with L[k]• If L[j] < L[k], follow the left branch; otherwise, follow the

right branch

Page 31: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 31

Lower Bound on Comparison-Based Sort Algorithms

Page 32: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 32

Lower Bound on Comparison-Based Sort Algorithms

• Top node in the figure is the root node• Straight line that connects the two nodes is called a branch• A sequence of branches from a node, x, to another node, y,

is called a path from x to y• Rectangle, called a leaf, represents the final ordering of the

nodes• Theorem: Let L be a list of n distinct elements. Any sorting

algorithm that sorts L by comparison of the keys only, in its worst case, makes at least O(n*log2n) key comparisons

Page 33: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 33

Quick Sort

• Recursive algorithm• Uses the divide-and-conquer technique to sort a

list• List is partitioned into two sublists, and the two

sublists are then sorted and combined into one list in such a way so that the combined list is sorted

Page 34: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 34

Quick Sort: Array-Based Lists

Page 35: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 35

Quick Sort: Array-Based Lists

Page 36: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 36

Quick Sort: Array-Based Lists

Page 37: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 37

Quick Sort: Array-Based Lists

Page 38: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 38

Quick Sort: Array-Based Lists

Page 39: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 39

Quick Sort: Array-Based Lists

Page 40: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 40

Quick Sort: Array-Based Listsprivate int partition(int first, int last){ DataElement pivot; int index, smallIndex; swap(first, (first + last) / 2); pivot = list[first]; smallIndex = first; for(index = first + 1; index <= last; index++) if(list[index].compareTo(pivot) < 0) { smallIndex++; swap(smallIndex, index); } swap(first, smallIndex); return smallIndex;}//end partition9

Page 41: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 41

Quick Sort: Array-Based Listsprivate void swap(int first, int second){ DataElement temp; temp = list[first]; list[first] = list[second]; list[second] = temp;}//end swap

Page 42: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 42

Quick Sort: Array-Based Listsprivate void recQuickSort(int first, int last){ int pivotLocation; if(first < last) { pivotLocation = partition(first, last); recQuickSort(first, pivotLocation - 1); recQuickSort(pivotLocation + 1, last); }}//end recQuickSort

public void quickSort(){ recQuickSort(0, length - 1);}//end quickSort

Page 43: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 43

Quick Sort: Array-Based Lists

Page 44: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 44

Merge Sort

• Uses the divide-and-conquer technique to sort a list

• Merge sort algorithm also partitions the list into two sublists, sorts the sublists, and then combines the sorted sublists into one sorted list

Page 45: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 45

Merge Sort Algorithm

Page 46: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 46

Divide

Page 47: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 47

Divide

Page 48: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 48

Merge

Page 49: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 49

Merge

Page 50: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 50

Analysis of Merge Sort

Suppose that L is a list of n elements, where n > 0. Let A(n) denote the number of key comparisons inthe average case, and W(n) denote the number of key comparisons in the worst case to sort L. It can be shown that:

A(n) = n*log2n – 1.26n = O(n*log2n)W(n) = n*log2n – (n–1) = O(n*log2n)

Page 51: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 51

Heap Sort

• Definition: A heap is a list in which each element contains a key, such that the key in the element at position k in the list is at least as large as the key in the element at position 2k + 1 (if it exists), and 2k + 2 (if it exists)

Page 52: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 52

Heap Sort: Array-Based Lists

Page 53: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 53

Heap Sort: Array-Based Lists

Page 54: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 54

Heap Sort: Array-Based Lists

Page 55: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 55

Heap Sort: Array-Based Lists

Page 56: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 56

Heap Sort: Array-Based Lists

Page 57: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 57

Heap Sort: Array-Based Lists

Page 58: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 58

Priority Queues: Insertion

Assuming the priority queue is implemented as a heap:1. Insert the new element in the first available position in

the list. (This ensures that the array holding the list is a complete binary tree.)

2. After inserting the new element in the heap, the list may no longer be a heap. So to restore the heap:

while (parent of new entry < new entry) swap the parent with the new entry

Page 59: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 59

Priority Queues: Remove

Assuming the priority queue is implemented as a heap, to remove the first element of the priority queue:

1. Copy the last element of the list into the first array position.

2. Reduce the length of the list by 1.3. Restore the heap in the list.

Page 60: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 60

Programming Example: Election Results

• The presidential election for the student council of your local university is about to be held. Due to confidentiality, the chair of the election committee wants to computerize the voting.

• The chair is looking for someone to write a program to analyze the data and report the winner.

• The university has four major divisions, and each division has several departments. For the election, the four divisions are labeled as region 1, region 2, region 3, and region 4.

• Each department in each division handles its own voting and directly reports the votes received by each candidate to the election committee.

Page 61: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 61

Programming Example: Election Results

The voting is reported in the following form:

firstName lastName regionNumber numberOfVotes

The election committee wants the output in the following tabular form:

--------------------Election Results------------------ Votes By RegionCandidate Name Rgn#1 Rgn#2 Rgn#3 Rgn#4 Total-------------- ----- ----- ----- ----- -----Buddy Balto 0 0 0 272 272Doctor Doc 25 71 156 97 349Ducky Donald 110 158 0 0 268...Winner: ???, Votes Received: ???Total votes polled: ???

Page 62: Data Structures Using Java1 Chapter 9 Sorting Algorithms

Data Structures Using Java 62

Chapter Summary

• Sorting Algorithms– Selection sort – Insertion sort – Quick sort– Merge sort– heap sort

• Algorithm analysis• Priority queues