SlideShare a Scribd company logo
Chapter 11 Sorting and Searching
Chapter 10 Objectives After you have read and studied this chapter, you should be able to Perform linear and binary search algorithms on small arrays. Determine whether a linear or binary search is more effective for a given situation. Perform selection and bubble sort algorithms. Describe the heapsort algorithm and show how its performance is superior to the other two algorithms. Apply basic sorting algorithms to sort an array of objects.
Searching When we maintain a collection of data, one of the operations we need is a search routine to locate desired data quickly.  Here’s the problem statement: Given a value X, return the index of X in the array, if such X exists. Otherwise, return NOT_FOUND (-1). We assume there are no duplicate entries in the array. We will count the number of comparisons the algorithms make to analyze their performance.  The ideal searching algorithm will make the least possible number of comparisons to locate the desired data. Two separate performance analyses are normally done, one for successful search and another for unsuccessful search.
Search Result number Unsuccessful Search: Successful Search: 23 17 5 90 12 44 38 0 1 2 3 4 5 6 7 8 84 77 NOT_FOUND search( 45 ) search( 12 ) 4
Linear Search Search the array from the first to the last position in linear progression.  public   int  linearSearch  (   int []  number,  int  searchValue  ) { int   loc = 0; while   ( loc < number.length  &&  number[loc] != searchValue ) { loc++; } if   ( loc == number.length )   {   //Not found return  NOT_FOUND;  }   else   { return  loc;   //Found, return the position } }
Linear Search Performance We analyze the successful and unsuccessful searches separately.  We count how many times the search value is compared against the array elements. Successful Search Best Case – 1 comparison Worst Case – N comparisons (N – array size) Unsuccessful Search Best Case =  Worst Case – N comparisons
Binary Search If the array is sorted, then we can apply the binary search technique. The basic idea is straightforward. First search the value in the middle position. If X is less than this value, then search the middle of the left half next. If X is greater than this value, then search the middle of the right half next. Continue in this manner. number 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90
Sequence of Successful Search - 1 search( 44 ) low high mid 38 <  44 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90 0 8 #1 high low low = mid+1 = 5 mid 4
Sequence of Successful Search - 2 search( 44 ) low high mid 44  < 77 4 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90 0 8 #1 high = mid-1=5 mid 6 high low 5 8 #2
Sequence of Successful Search - 3 search( 44 ) low high mid 44  == 44 4 6 Successful Search!! 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90 0 8 #1 5 8 #2 high low 5 5 #3 mid 5
Sequence of Unsuccessful Search - 1 search( 45 ) low high mid 38 <  45 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90 0 8 #1 high low low = mid+1 = 5 mid 4
Sequence of Unsuccessful Search - 2 search( 45 ) low high mid 45  < 77 4 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90 0 8 #1 high = mid-1=5 mid 6 high low 5 8 #2
Sequence of Unsuccessful Search - 3 search( 45 ) low high mid 44 <  45   4 6 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90 0 8 #1 5 8 #2 high low 5 5 #3 mid 5 low = mid+1 = 6
Sequence of Unsuccessful Search - 4 search( 45 ) low high mid 4 6 5 Unsuccessful Search low > high 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90 0 8 #1 5 8 #2 5 5 #3 high low 6 5 #4 no more elements to search
Binary Search Routine public   int  binarySearch  ( int []  number,  int  searchValue ) { int   low  = 0,  high  = number.length - 1,  mid = (low + high) / 2; while   ( low <= high && number[mid] != searchValue ) { if   ( number [ mid ]  < searchValue ) { low = mid + 1; }   else   {   //number[mid] > searchValue high = mid - 1; } mid  =  ( low + high )  / 2;  //integer division will truncate } if   ( low > high ) { mid = NOT_FOUND;  } return  mid; }
Binary Search Performance Successful Search Best Case – 1 comparison Worst Case – log 2 N comparisons Unsuccessful Search Best Case = Worst Case – log 2 N comparisons Since the portion of an array to search is cut into half after every comparison, we compute how many times the array can be divided into halves.  After K comparisons, there will be N/2 K  elements in the list. We solve for K when N/2 K  = 1, deriving K = log 2 N.
Comparing N and log 2 N Performance Array Size Linear – N  Binary – log 2 N
Sorting When we maintain a collection of data, many applications call for rearranging the data in certain order, e.g. arranging Person information in ascending order of age. Here’s the problem statement: Given an array of N integer values, arrange the values into ascending order.  We will count the number of comparisons the algorithms make to analyze their performance.  The ideal sorting algorithm will make the least possible number of comparisons to arrange data in a designated order. We will compare different sorting algorithms by analyzing their worst-case performance.
Selection Sort Find the smallest element in the list. Exchange the element in the first position and the smallest element. Now the smallest element is in the first position. Repeat Step 1 and 2 with the list having one less element (i.e., the smallest element is discarded from further processing). This is the result of one  pass . 0 1 2 3 4 5 6 7 8 23 17 5 90 12 44 38 84 77 min first exchange 0 1 2 3 4 5 6 7 8 5 17 23 90 12 44 38 84 77 sorted unsorted
Selection Sort Passes 2 3 7 8 Result AFTER one pass is completed. 0 1 2 3 4 5 6 7 8 5 17 23 90 12 44 38 84 77 sorted 5 12 23 90 17 44 38 84 77 5 12 17 90 23 44 38 84 77 5 12 17 23 38 44 77 84 90 5 12 17 23 38 44 77 84 90 1 Pass #
Selection Sort Routine public   void  selectionSort ( int []  number ) { int  startIndex, minIndex, length, temp; length = number.length; for   ( startIndex = 0; startIndex <= length-2; startIndex++ ){ //each iteration of the for loop is one pass minIndex = startIndex; //find the smallest in this pass at position minIndex for   ( int  i = startIndex+1; i <= length-1; i++ ) {   if  (number [ i ]  < number [ minIndex ])  minIndex = i; } //exchange number[startIndex] and number[minIndex] temp   = number [ startIndex ] ; number [ startIndex ]  = number [ minIndex ] ; number [ minIndex ]     = temp; } }
Selection Sort Performance We derive the total number of comparisons by counting the number of times the inner loop is executed. For each execution of the outer loop, the inner loop is executed  length – start  times. The variable length is the size of the array. Replacing length with N, the array size, the sum is derived as…
Bubble Sort With the selection sort, we make one exchange at the end of one pass.  The bubble sort improves the performance by making more than one exchange during its pass. By making multiple exchanges, we will be able to move more elements toward their correct positions using the same number of comparisons as the selection sort makes. The key idea of the bubble sort is to make pairwise comparisons and exchange the positions of the pair if they are out of order.
One Pass of Bubble Sort The largest value 90 is at the end of the list. ok 0 1 2 3 4 5 6 7 8 23 17 5 90 12 44 38 84 77 17 23 5 90 12 44 38 84 77 17 5 23 90 12 44 38 84 77 17 5 23 12 90 44 38 84 77 17 5 23 12 44 90 38 84 77 17 5 23 12 44 38 90 84 77 17 5 23 12 44 38 84 90 77 17 5 23 12 44 38 84 77 90 exchange exchange exchange exchange exchange exchange exchange
Bubble Sort Routine public   void  bubbleSort ( int []  number ) { int     temp, bottom, i;  boolean   exchanged = true; bottom = number.length - 2; while   ( exchanged )  { exchanged =  false ;  for   ( i = 0; i <= bottom; i++ ) { if (number [ i ]  > number [ i+1 ])   { temp   = number [ i ] ;  //exchange number [ i ]   = number [ i+1 ] ; number [ i+1 ]  = temp; exchanged =  true ;  //exchange is made   } } bottom--; } }
Bubble Sort Performance In the worst case, the outer while loop is executed N-1 times for carrying out N-1 passes. For each execution of the outer loop, the inner loop is executed  bottom+1  times. The number of comparisons in each successive pass is N-1, N-2, … , 1. Summing these will result in the total number of comparisons. So the performances of the bubble sort and the selection sort are approximately equivalent. However, on the average, the bubble sort performs much better than the selection sort because it can finish the sorting without doing all N-1 passes.
Heapsort Selection and bubble sorts are two fundamental sorting algorithms that take approximately N2 comparisons to sort an array of N elements. One sorting algorithm that improves the performance to approximately 1.5Nlog2N is called heapsort. The heapsort algorithm uses a special data structure called a heap. A heap structure can be implemented very effectively by using an array.
Sample Heap 90 84 44 12 5 38 77 17 23 0 1 2 3 4 5 6 7 8 root index left child  of  44 right child  of  44 Level # 1 2 3 4
Heap Constraints A heap must satisfy the following two constraints: Structural Constraint : Nodes in a heap with N nodes must occupy the positions numbered 0, 1, ..., N-1.  Value Relationship Constraint : A value stored in a node must be larger than the maximum of the values stored in its left and right children.
Structural Constraints Sample heaps and nonheaps that violate the structural constraints: Nonheaps Heaps
Value Relationship Constraints Sample heaps and nonheaps that violate the value relationship constraints: Nonheaps Heaps 45 25 16 3 12 22 45 12 34 11 22 9 90 35 24 13 16 12 45 55 16 3 12 58 45 25 33 34 23 22 45 25 55 3 12 22
Heapsort Algorithm How can we use the heap structure to sort N elements? Heapsort is carried out in two phases: Construction Phase : Construct a heap with given N elements.  Extraction Phase : Pull out the value in the root successively, creating a new heap with one less element after each extraction.
Extraction Phase After each extraction, a heap must be rebuilt with one less element. One sample extraction step: 90 23 > max{84, 44}? NO, so swap. 23 > max{77, 12}? NO, so swap. 23 > max{17}? YES, so stop. Before After 90 84 44 12 5 38 77 17 23 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 90 23 84 44 12 5 38 77 17 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 90 84 23 44 12 5 38 77 17 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 90 84 77 44 12 5 38 23 17 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 90 84 77 44 12 5 38 23 17 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 90 90 84 44 12 5 38 77 17 23 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Rebuild Steps A sequence of rebuild steps to sort the list. 90 84 77 44 38 23 17 12 5 Sorting was completed after 8 rebuild steps. 90 84 44 12 5 38 77 17 23 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 90 84 44 12 5 38 77 17 23 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 Before 90 84 77 44 12 5 38 23 17 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 90 84 77 23 44 12 5 38 17 0 1 2 3 4 5 6 0 1 2 3 4 5 6 7 8 90 84 77 44 23 38 12 5 17 0 1 2 3 4 5 0 1 2 3 4 5 6 7 8 90 84 77 44 38 23 5 12 17 0 1 2 3 4 0 1 2 3 4 5 6 7 8 90 84 77 44 38 23 17 5 12 0 1 2 3 0 1 2 3 4 5 6 7 8 90 84 77 44 38 23 17 12 5 0 1 2 0 1 2 3 4 5 6 7 8 90 84 77 44 38 23 17 12 5 0 1 0 1 2 3 4 5 6 7 8 90 84 77 44 38 23 17 12 5 0 0 1 2 3 4 5 6 7 8 90 84 77 44 38 23 17 12 5 0 1 2 3 4 5 6 7 8 90 84 77 44 38 23 17 12 5 Done
Construction Phase Rebuild steps are applied from position   (N-2)/2    to position 0. Before 23 17 5 12 44 38 90 84 77 0 1 2 3 4 5 6 7 8 23 17 5 12 44 38 90 84 77 0 1 2 3 4 5 6 7 8 3  (9-2)/2    = 3 23 17 5 12 44 38 90 84 77 0 1 2 3 4 5 6 7 8 2 23 17 44 12 5 38 90 84 77 0 1 2 3 4 5 6 7 8 1 23 90 44 12 5 38 84 17 77 0 1 2 3 4 5 6 7 8 0 90 84 44 12 5 38 77 17 23 0 1 2 3 4 5 6 7 8 Done
Heap Implementation We need to implement the abstract data structure heap into a concrete data structure. 90 84 44 12 5 38 77 17 23 0 1 2 3 4 5 6 7 8 Abstract Heap Structure Concrete Implementation 0 1 2 3 4 5 6 7 8 23 17 38 5 12 77 44 84 90
The construct Method private   void  construct ( ) { for   ( int  i =  ( heap.length-2 )  / 2; i >= 0; i-- ) {  current = i;  done  =  false ;  while   (  !done  ) {   if   (   current has no children   ) { done = true; }   else   { if   ( current node < larger child ) { swap the two nodes ; set current points to the larger child ; }   else   {   done =  true ; } } } } }
The extract Method private void  extract ( ) { for  ( int  size = heap.length-1; size >= 0; size-- ) { remove the root node data ;   move the last node to the root; done  =  false ;  //rebuild the heap with one less element while   ( !done ) { if   ( current has no children ) { done =  true ; }   else   { if   ( current node < larger child ) { swap the two nodes ; set current points to the larger child ; }   else   {   done =  true ; } } }  } }
Heapsort Performance The total number of comparisons in the extraction phase is (N-1) ļ‚“ K where K is the depth of a heap. We solve for K using the fact that the heap must satisfy the structural constraint:  Therefore,  total # nodes in a heap with depth K this holds because of the structural constraint
Heapsort Performance (cont'd) There are N/2 rebuild steps in the construction phase. Each rebuild step will take no more than K comparisons. The total number of comparisons in the construction phase is approximately  Therefore, the total number of comparisons for both phases is
Problem Statement Problem statement: Add the sorting capability to the AddressBook class from Chapter 10. The new AddressBook class will include a method that sort Person objects in alphabetical order of their names or in ascending order of their ages.
Overall Plan Instead of going through the development steps, we will present three different implementations. The three versions are named AddressBookVer1, AddressBookVer2, and AddressBookVer3. These classes will implement the AddressBook interface.
The AddressBook Interface interface   AddressBook  { public void   add ( Person newPerson ) ; public boolean   delete ( String searchName ) ; public   Person search ( String searchName ) ; public   Person [ ]  sort  ( int   attribute ) ; }
AddressBookVer1 Design We use an array of Person objects We provide our own sorting method in the AddressBookVer1 class We define the Person class so we can compare Person objects by name or by age
Comparing Person Objects First, we need to determine how to compare Person objects The following does not make sense: Person p1 = …; Person p2 = …; if   (  p1 < p2  ) {  …  }
Modify the Person Class Modify the Person class to include a variable that tells which attribute to compare. class  Person  { … public static final int  NAME = 0; public static final int  AGE  = 1; public static int  compareAttribute = NAME;  … public static void  setCompareAttribute ( int  attribute ) { compareAttribute = attribute; } … }
The compareTo Method To compare Person objects, first set the comparison attribute and then call the compareTo Method. Person.setCompareAttribute (Person.NAME); int  compResult = p1.compareTo ( p2 ) ; if   ( compResult < 0 ) { //p1 ā€œless thanā€ p2 }   else if   ( compResult == 0 )   { //p1 ā€œequalsā€ pw }   else   { //p2 ā€œgreater thanā€ p2 } public   int  compareTo ( Person p )   { int  compResult; if   (  comparisonAttribute == AGE  ) { int  p2age = p.getAge(); if   (   this .age < p2age  ) { compResult = LESS; } … }   else   {   //compare Name String p2Name = p.getName () ; compResult =  this .name.   compareTo ( p2Name ) ; } return  compResult; }
The sort Method public  Person [ ]  sort  ( int  attribute ) { Person [ ]  sortedList =  new  Person [ count ] ; Person p1, p2, temp; //copy references to sortedList   for   ( int  i = 0; i < count; i++ ) { sortedList [ i ]  = entry [ i ] ; } //Set the comparison attribute Person.setCompareAttribute ( attribute ) ;  //begin the bubble sort on sortedList … } return  sortedList; }
The Use of sortedList in the sort Method
AddressBookVer1 Code Directory:   Chapter11/ Source Files:  AddressBookVer1.java Program source file is too big to list here. From now on, we ask you to view the source files using your Java IDE.
AddressBookVer2 Design We use the java.util.Arrays class to sort an array of Person objects The Person class does not include any comparison methods. Instead, we implement the Comparator interface. We can define the implementation class so we can compare Person objects using any combination of their attributes For example, we can define a comparator that compares Person objects by using both name and age
The AgeComparator Class This class compares the age attributes of Person objects class   AgeComparator  implements   Comparator  { private final int   LESS = -1; private final int   EQUAL = 0; private final int   MORE = 1; public int   compare ( Object p1, Object p2 ) { int   comparisonResult; int   p1age =  (( Person ) p1 ) .getAge ( ) ; int   p2age =  (( Person ) p2 ) .getAge ( ) ; if   ( p1age < p2age ) { comparisonResult = LESS; }  else if   ( p1age == p2age ) { comparisonResult = EQUAL;   }   else   { assert   p1age > p2age; comparisonResult = MORE; } return   comparisonResult; } }
The NameComparator Class This class compares the age attributes of Person objects Because the name attribute is a string we can use the compareTo method of the String class class   NameComparator  implements   Comparator  { public int   compare ( Object p1, Object p2 ) { String p1name =  (( Person ) p1 ) .getName ( ) ; String p2name =  (( Person ) p2 ) .getName ( ) ; return   p1name.compareTo ( p2name ) ; } }
The sort Method We use the sort method of the java.util.Arrays class public   Person [ ]  sort  (  int   attribute  ) { if   ( ! ( attribute == Person.NAME ||  attribute == Person.AGE ) ) { throw   new   IllegalArgumentException ( ) ; } Person [ ]  sortedList =  new   Person [  count  ] ; //copy references to sortedList for   ( int   i = 0; i < count; i++ ) { sortedList [ i ]  = entry [ i ] ; } Arrays.sort ( sortedList, getComparator ( attribute )) ; return   sortedList; }
AddressBookVer2 Code Directory:   Chapter11/ Source Files:  AddressBookVer2.java Program source file is too big to list here. From now on, we ask you to view the source files using your Java IDE.
AddressBookVer3 Design In the previous two versions, we used an array data structure to maintain a collection of Person objects In the third version, we don't use an array at all. Instead, we use a Map from the Java Collection Framework to maintain a collection of Person objects. We use the person's name as the key of a Map entry and the person object as the value of a Map entry.
The sort Method We retrieve a collection of values in the map, converts it to an array, and use the sort method of the java.util.Arrays class to sort this array. public   Person [ ]  sort  (  int   attribute  ) { if  ( ! ( attribute == Person.NAME ||   attribute == Person.AGE ) ) { throw   new   IllegalArgumentException ( ) ; } Person [ ]  sortedList =  new   Person [ entry.size ()] ; entry.values () .toArray ( sortedList ) ; Arrays.sort ( sortedList, getComparator ( attribute )) ; return   sortedList; }
AddressBookVer3 Code Directory:   Chapter11/ Source Files:  AddressBookVer3.java Program source file is too big to list here. From now on, we ask you to view the source files using your Java IDE.

More Related Content

PPT
Complexity of Algorithm
Muhammad Muzammal
Ā 
PPTX
Insertion sort
almaqboli
Ā 
PPTX
Searching techniques in Data Structure And Algorithm
03446940736
Ā 
PPTX
Linear Search
SWATHIR72
Ā 
PDF
Binary Search - Design & Analysis of Algorithms
Drishti Bhalla
Ā 
PDF
linear search and binary search
Zia Ush Shamszaman
Ā 
PPTX
Sorting in python
Simplilearn
Ā 
PPTX
PPT On Sorting And Searching Concepts In Data Structure | In Programming Lang...
Umesh Kumar
Ā 
Complexity of Algorithm
Muhammad Muzammal
Ā 
Insertion sort
almaqboli
Ā 
Searching techniques in Data Structure And Algorithm
03446940736
Ā 
Linear Search
SWATHIR72
Ā 
Binary Search - Design & Analysis of Algorithms
Drishti Bhalla
Ā 
linear search and binary search
Zia Ush Shamszaman
Ā 
Sorting in python
Simplilearn
Ā 
PPT On Sorting And Searching Concepts In Data Structure | In Programming Lang...
Umesh Kumar
Ā 

What's hot (20)

PPTX
Sorting algorithms
Trupti Agrawal
Ā 
PPTX
Binary Search Tree in Data Structure
Dharita Chokshi
Ā 
PPTX
Collision in Hashing.pptx
NBACriteria2SICET
Ā 
PPTX
Quick sort-Data Structure
Jeanie Arnoco
Ā 
PPT
Divide and conquer
Dr Shashikant Athawale
Ā 
PPT
Binary Search
kunj desai
Ā 
PPTX
Algorithm Complexity and Main Concepts
Adelina Ahadova
Ā 
PPTX
Doubly Linked List || Operations || Algorithms
Shubham Sharma
Ā 
PDF
Bottom up parser
Akshaya Arunan
Ā 
PPT
Searching algorithms
Trupti Agrawal
Ā 
PPTX
Linear search-and-binary-search
International Islamic University
Ā 
PPTX
Insertion Sorting
FarihaHabib123
Ā 
PPTX
Binary search in data structure
Meherul1234
Ā 
PPTX
Binary Tree in Data Structure
Meghaj Mallick
Ā 
PPTX
Insertion sort algorithm power point presentation
University of Science and Technology Chitttagong
Ā 
PPT
Lec 17 heap data structure
Sajid Marwat
Ā 
PPT
Heap sort
Mohd Arif
Ā 
PPTX
Algorithm analysis (All in one)
jehan1987
Ā 
PPTX
Data Structures : hashing (1)
Home
Ā 
PDF
Time and Space Complexity
Ashutosh Satapathy
Ā 
Sorting algorithms
Trupti Agrawal
Ā 
Binary Search Tree in Data Structure
Dharita Chokshi
Ā 
Collision in Hashing.pptx
NBACriteria2SICET
Ā 
Quick sort-Data Structure
Jeanie Arnoco
Ā 
Divide and conquer
Dr Shashikant Athawale
Ā 
Binary Search
kunj desai
Ā 
Algorithm Complexity and Main Concepts
Adelina Ahadova
Ā 
Doubly Linked List || Operations || Algorithms
Shubham Sharma
Ā 
Bottom up parser
Akshaya Arunan
Ā 
Searching algorithms
Trupti Agrawal
Ā 
Linear search-and-binary-search
International Islamic University
Ā 
Insertion Sorting
FarihaHabib123
Ā 
Binary search in data structure
Meherul1234
Ā 
Binary Tree in Data Structure
Meghaj Mallick
Ā 
Insertion sort algorithm power point presentation
University of Science and Technology Chitttagong
Ā 
Lec 17 heap data structure
Sajid Marwat
Ā 
Heap sort
Mohd Arif
Ā 
Algorithm analysis (All in one)
jehan1987
Ā 
Data Structures : hashing (1)
Home
Ā 
Time and Space Complexity
Ashutosh Satapathy
Ā 
Ad

Viewers also liked (7)

PPT
Data Structures - Searching & sorting
Kaushal Shah
Ā 
PPT
Linear Search & Binary Search
Reem Alattas
Ā 
PPT
Sorting algorithms v01
Dusan Vuckovic
Ā 
PPT
Sorting
Ghaffar Khan
Ā 
PDF
Sorting algorithms
Vicente GarcĆ­a DĆ­az
Ā 
PPTX
Data Structures - Lecture 8 [Sorting Algorithms]
Muhammad Hammad Waseem
Ā 
PDF
Sorting Algorithms
Mohammed Hussein
Ā 
Data Structures - Searching & sorting
Kaushal Shah
Ā 
Linear Search & Binary Search
Reem Alattas
Ā 
Sorting algorithms v01
Dusan Vuckovic
Ā 
Sorting
Ghaffar Khan
Ā 
Sorting algorithms
Vicente GarcĆ­a DĆ­az
Ā 
Data Structures - Lecture 8 [Sorting Algorithms]
Muhammad Hammad Waseem
Ā 
Sorting Algorithms
Mohammed Hussein
Ā 
Ad

Similar to Chapter 11 - Sorting and Searching (20)

PPT
(Data Structure) Chapter11 searching & sorting
Fadhil Ismail
Ā 
PPT
Searching Sorting-SELECTION ,BUBBBLE.ppt
kunalpatil5661
Ā 
PDF
advanced searching and sorting.pdf
haramaya university
Ā 
PPT
Data Structures 6
Dr.Umadevi V
Ā 
PPTX
Lecture_Oct26.pptx
SylrizcinMarieManzo3
Ā 
PPTX
Ch 2Algo Analysis.pptxCh 2Algo Analysis.pptx
abduulahikhmaies
Ā 
PPTX
Searching and sorting Techniques in Data structures
PRIANKA R
Ā 
PPTX
Searching searching in in arrays arrays.pptx
Sahar160629
Ā 
PDF
Data structures arrays
maamir farooq
Ā 
PPTX
Chapter 2 Sorting and Searching .pptx.soft
kuruabeje7
Ā 
PPT
Data Structure (MC501)
Kamal Singh Lodhi
Ā 
PPTX
sorting.pptx
DrRanjeetKumar51721
Ā 
PPTX
SORT AND SEARCH ARRAY WITH WITH C++.pptx
narifmsit18seecs
Ā 
PPTX
Searching and Sorting Algorithms in Data Structures
poongothai11
Ā 
PPTX
Unit vii sorting
Tribhuvan University
Ā 
PPT
Sorting algorithums > Data Structures & Algorithums
Ain-ul-Moiz Khawaja
Ā 
PPTX
searching in data structure.pptx
chouguleamruta24
Ā 
DOC
Selection sort
asra khan
Ā 
PPTX
Unit 8 searching and hashing
Dabbal Singh Mahara
Ā 
PDF
Advanced Topics In Java Core Concepts In Data Structures Noel Kalicharan
fickolatigo
Ā 
(Data Structure) Chapter11 searching & sorting
Fadhil Ismail
Ā 
Searching Sorting-SELECTION ,BUBBBLE.ppt
kunalpatil5661
Ā 
advanced searching and sorting.pdf
haramaya university
Ā 
Data Structures 6
Dr.Umadevi V
Ā 
Lecture_Oct26.pptx
SylrizcinMarieManzo3
Ā 
Ch 2Algo Analysis.pptxCh 2Algo Analysis.pptx
abduulahikhmaies
Ā 
Searching and sorting Techniques in Data structures
PRIANKA R
Ā 
Searching searching in in arrays arrays.pptx
Sahar160629
Ā 
Data structures arrays
maamir farooq
Ā 
Chapter 2 Sorting and Searching .pptx.soft
kuruabeje7
Ā 
Data Structure (MC501)
Kamal Singh Lodhi
Ā 
sorting.pptx
DrRanjeetKumar51721
Ā 
SORT AND SEARCH ARRAY WITH WITH C++.pptx
narifmsit18seecs
Ā 
Searching and Sorting Algorithms in Data Structures
poongothai11
Ā 
Unit vii sorting
Tribhuvan University
Ā 
Sorting algorithums > Data Structures & Algorithums
Ain-ul-Moiz Khawaja
Ā 
searching in data structure.pptx
chouguleamruta24
Ā 
Selection sort
asra khan
Ā 
Unit 8 searching and hashing
Dabbal Singh Mahara
Ā 
Advanced Topics In Java Core Concepts In Data Structures Noel Kalicharan
fickolatigo
Ā 

More from Eduardo Bergavera (10)

PPTX
CLP Session 5 - The Christian Family
Eduardo Bergavera
Ā 
PDF
What is Python?
Eduardo Bergavera
Ā 
PPT
Chapter 13 - Inheritance and Polymorphism
Eduardo Bergavera
Ā 
PPT
Chapter 12 - File Input and Output
Eduardo Bergavera
Ā 
PPT
Chapter 9 - Characters and Strings
Eduardo Bergavera
Ā 
PPT
Chapter 8 - Exceptions and Assertions Edit summary
Eduardo Bergavera
Ā 
PPT
Chapter 7 - Defining Your Own Classes - Part II
Eduardo Bergavera
Ā 
PPT
Chapter 4 - Defining Your Own Classes - Part I
Eduardo Bergavera
Ā 
PPT
Chapter 2 - Getting Started with Java
Eduardo Bergavera
Ā 
PPT
Chapter1 - Introduction to Object-Oriented Programming and Software Development
Eduardo Bergavera
Ā 
CLP Session 5 - The Christian Family
Eduardo Bergavera
Ā 
What is Python?
Eduardo Bergavera
Ā 
Chapter 13 - Inheritance and Polymorphism
Eduardo Bergavera
Ā 
Chapter 12 - File Input and Output
Eduardo Bergavera
Ā 
Chapter 9 - Characters and Strings
Eduardo Bergavera
Ā 
Chapter 8 - Exceptions and Assertions Edit summary
Eduardo Bergavera
Ā 
Chapter 7 - Defining Your Own Classes - Part II
Eduardo Bergavera
Ā 
Chapter 4 - Defining Your Own Classes - Part I
Eduardo Bergavera
Ā 
Chapter 2 - Getting Started with Java
Eduardo Bergavera
Ā 
Chapter1 - Introduction to Object-Oriented Programming and Software Development
Eduardo Bergavera
Ā 

Recently uploaded (20)

PDF
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
Artjoker Software Development Company
Ā 
PDF
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
Ā 
PDF
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
Ā 
PDF
DevOps & Developer Experience Summer BBQ
AUGNYC
Ā 
PPTX
Stamford - Community User Group Leaders_ Agentblazer Status, AI Sustainabilit...
Amol Dixit
Ā 
PDF
Software Development Methodologies in 2025
KodekX
Ā 
PDF
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
Ā 
PDF
Doc9.....................................
SofiaCollazos
Ā 
PDF
Revolutionize Operations with Intelligent IoT Monitoring and Control
Rejig Digital
Ā 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
Ā 
PDF
CIFDAQ'S Market Insight: BTC to ETH money in motion
CIFDAQ
Ā 
PDF
A Day in the Life of Location Data - Turning Where into How.pdf
Precisely
Ā 
PDF
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
Ā 
PPTX
How to Build a Scalable Micro-Investing Platform in 2025 - A Founder’s Guide ...
Third Rock Techkno
Ā 
PDF
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
Ā 
PPTX
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
Ā 
PPT
Coupa-Kickoff-Meeting-Template presentai
annapureddyn
Ā 
PPTX
What-is-the-World-Wide-Web -- Introduction
tonifi9488
Ā 
PDF
Advances in Ultra High Voltage (UHV) Transmission and Distribution Systems.pdf
Nabajyoti Banik
Ā 
PPTX
ChatGPT's Deck on The Enduring Legacy of Fax Machines
Greg Swan
Ā 
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
Artjoker Software Development Company
Ā 
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
Ā 
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
Ā 
DevOps & Developer Experience Summer BBQ
AUGNYC
Ā 
Stamford - Community User Group Leaders_ Agentblazer Status, AI Sustainabilit...
Amol Dixit
Ā 
Software Development Methodologies in 2025
KodekX
Ā 
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
Ā 
Doc9.....................................
SofiaCollazos
Ā 
Revolutionize Operations with Intelligent IoT Monitoring and Control
Rejig Digital
Ā 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
Ā 
CIFDAQ'S Market Insight: BTC to ETH money in motion
CIFDAQ
Ā 
A Day in the Life of Location Data - Turning Where into How.pdf
Precisely
Ā 
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
Ā 
How to Build a Scalable Micro-Investing Platform in 2025 - A Founder’s Guide ...
Third Rock Techkno
Ā 
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
Ā 
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
Ā 
Coupa-Kickoff-Meeting-Template presentai
annapureddyn
Ā 
What-is-the-World-Wide-Web -- Introduction
tonifi9488
Ā 
Advances in Ultra High Voltage (UHV) Transmission and Distribution Systems.pdf
Nabajyoti Banik
Ā 
ChatGPT's Deck on The Enduring Legacy of Fax Machines
Greg Swan
Ā 

Chapter 11 - Sorting and Searching

  • 1. Chapter 11 Sorting and Searching
  • 2. Chapter 10 Objectives After you have read and studied this chapter, you should be able to Perform linear and binary search algorithms on small arrays. Determine whether a linear or binary search is more effective for a given situation. Perform selection and bubble sort algorithms. Describe the heapsort algorithm and show how its performance is superior to the other two algorithms. Apply basic sorting algorithms to sort an array of objects.
  • 3. Searching When we maintain a collection of data, one of the operations we need is a search routine to locate desired data quickly. Here’s the problem statement: Given a value X, return the index of X in the array, if such X exists. Otherwise, return NOT_FOUND (-1). We assume there are no duplicate entries in the array. We will count the number of comparisons the algorithms make to analyze their performance. The ideal searching algorithm will make the least possible number of comparisons to locate the desired data. Two separate performance analyses are normally done, one for successful search and another for unsuccessful search.
  • 4. Search Result number Unsuccessful Search: Successful Search: 23 17 5 90 12 44 38 0 1 2 3 4 5 6 7 8 84 77 NOT_FOUND search( 45 ) search( 12 ) 4
  • 5. Linear Search Search the array from the first to the last position in linear progression. public int linearSearch ( int [] number, int searchValue ) { int loc = 0; while ( loc < number.length && number[loc] != searchValue ) { loc++; } if ( loc == number.length ) { //Not found return NOT_FOUND; } else { return loc; //Found, return the position } }
  • 6. Linear Search Performance We analyze the successful and unsuccessful searches separately. We count how many times the search value is compared against the array elements. Successful Search Best Case – 1 comparison Worst Case – N comparisons (N – array size) Unsuccessful Search Best Case = Worst Case – N comparisons
  • 7. Binary Search If the array is sorted, then we can apply the binary search technique. The basic idea is straightforward. First search the value in the middle position. If X is less than this value, then search the middle of the left half next. If X is greater than this value, then search the middle of the right half next. Continue in this manner. number 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90
  • 8. Sequence of Successful Search - 1 search( 44 ) low high mid 38 < 44 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90 0 8 #1 high low low = mid+1 = 5 mid 4
  • 9. Sequence of Successful Search - 2 search( 44 ) low high mid 44 < 77 4 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90 0 8 #1 high = mid-1=5 mid 6 high low 5 8 #2
  • 10. Sequence of Successful Search - 3 search( 44 ) low high mid 44 == 44 4 6 Successful Search!! 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90 0 8 #1 5 8 #2 high low 5 5 #3 mid 5
  • 11. Sequence of Unsuccessful Search - 1 search( 45 ) low high mid 38 < 45 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90 0 8 #1 high low low = mid+1 = 5 mid 4
  • 12. Sequence of Unsuccessful Search - 2 search( 45 ) low high mid 45 < 77 4 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90 0 8 #1 high = mid-1=5 mid 6 high low 5 8 #2
  • 13. Sequence of Unsuccessful Search - 3 search( 45 ) low high mid 44 < 45 4 6 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90 0 8 #1 5 8 #2 high low 5 5 #3 mid 5 low = mid+1 = 6
  • 14. Sequence of Unsuccessful Search - 4 search( 45 ) low high mid 4 6 5 Unsuccessful Search low > high 5 12 17 23 38 44 77 0 1 2 3 4 5 6 7 8 84 90 0 8 #1 5 8 #2 5 5 #3 high low 6 5 #4 no more elements to search
  • 15. Binary Search Routine public int binarySearch ( int [] number, int searchValue ) { int low = 0, high = number.length - 1, mid = (low + high) / 2; while ( low <= high && number[mid] != searchValue ) { if ( number [ mid ] < searchValue ) { low = mid + 1; } else { //number[mid] > searchValue high = mid - 1; } mid = ( low + high ) / 2; //integer division will truncate } if ( low > high ) { mid = NOT_FOUND; } return mid; }
  • 16. Binary Search Performance Successful Search Best Case – 1 comparison Worst Case – log 2 N comparisons Unsuccessful Search Best Case = Worst Case – log 2 N comparisons Since the portion of an array to search is cut into half after every comparison, we compute how many times the array can be divided into halves. After K comparisons, there will be N/2 K elements in the list. We solve for K when N/2 K = 1, deriving K = log 2 N.
  • 17. Comparing N and log 2 N Performance Array Size Linear – N Binary – log 2 N
  • 18. Sorting When we maintain a collection of data, many applications call for rearranging the data in certain order, e.g. arranging Person information in ascending order of age. Here’s the problem statement: Given an array of N integer values, arrange the values into ascending order. We will count the number of comparisons the algorithms make to analyze their performance. The ideal sorting algorithm will make the least possible number of comparisons to arrange data in a designated order. We will compare different sorting algorithms by analyzing their worst-case performance.
  • 19. Selection Sort Find the smallest element in the list. Exchange the element in the first position and the smallest element. Now the smallest element is in the first position. Repeat Step 1 and 2 with the list having one less element (i.e., the smallest element is discarded from further processing). This is the result of one pass . 0 1 2 3 4 5 6 7 8 23 17 5 90 12 44 38 84 77 min first exchange 0 1 2 3 4 5 6 7 8 5 17 23 90 12 44 38 84 77 sorted unsorted
  • 20. Selection Sort Passes 2 3 7 8 Result AFTER one pass is completed. 0 1 2 3 4 5 6 7 8 5 17 23 90 12 44 38 84 77 sorted 5 12 23 90 17 44 38 84 77 5 12 17 90 23 44 38 84 77 5 12 17 23 38 44 77 84 90 5 12 17 23 38 44 77 84 90 1 Pass #
  • 21. Selection Sort Routine public void selectionSort ( int [] number ) { int startIndex, minIndex, length, temp; length = number.length; for ( startIndex = 0; startIndex <= length-2; startIndex++ ){ //each iteration of the for loop is one pass minIndex = startIndex; //find the smallest in this pass at position minIndex for ( int i = startIndex+1; i <= length-1; i++ ) { if (number [ i ] < number [ minIndex ]) minIndex = i; } //exchange number[startIndex] and number[minIndex] temp = number [ startIndex ] ; number [ startIndex ] = number [ minIndex ] ; number [ minIndex ] = temp; } }
  • 22. Selection Sort Performance We derive the total number of comparisons by counting the number of times the inner loop is executed. For each execution of the outer loop, the inner loop is executed length – start times. The variable length is the size of the array. Replacing length with N, the array size, the sum is derived as…
  • 23. Bubble Sort With the selection sort, we make one exchange at the end of one pass. The bubble sort improves the performance by making more than one exchange during its pass. By making multiple exchanges, we will be able to move more elements toward their correct positions using the same number of comparisons as the selection sort makes. The key idea of the bubble sort is to make pairwise comparisons and exchange the positions of the pair if they are out of order.
  • 24. One Pass of Bubble Sort The largest value 90 is at the end of the list. ok 0 1 2 3 4 5 6 7 8 23 17 5 90 12 44 38 84 77 17 23 5 90 12 44 38 84 77 17 5 23 90 12 44 38 84 77 17 5 23 12 90 44 38 84 77 17 5 23 12 44 90 38 84 77 17 5 23 12 44 38 90 84 77 17 5 23 12 44 38 84 90 77 17 5 23 12 44 38 84 77 90 exchange exchange exchange exchange exchange exchange exchange
  • 25. Bubble Sort Routine public void bubbleSort ( int [] number ) { int temp, bottom, i; boolean exchanged = true; bottom = number.length - 2; while ( exchanged ) { exchanged = false ; for ( i = 0; i <= bottom; i++ ) { if (number [ i ] > number [ i+1 ]) { temp = number [ i ] ; //exchange number [ i ] = number [ i+1 ] ; number [ i+1 ] = temp; exchanged = true ; //exchange is made } } bottom--; } }
  • 26. Bubble Sort Performance In the worst case, the outer while loop is executed N-1 times for carrying out N-1 passes. For each execution of the outer loop, the inner loop is executed bottom+1 times. The number of comparisons in each successive pass is N-1, N-2, … , 1. Summing these will result in the total number of comparisons. So the performances of the bubble sort and the selection sort are approximately equivalent. However, on the average, the bubble sort performs much better than the selection sort because it can finish the sorting without doing all N-1 passes.
  • 27. Heapsort Selection and bubble sorts are two fundamental sorting algorithms that take approximately N2 comparisons to sort an array of N elements. One sorting algorithm that improves the performance to approximately 1.5Nlog2N is called heapsort. The heapsort algorithm uses a special data structure called a heap. A heap structure can be implemented very effectively by using an array.
  • 28. Sample Heap 90 84 44 12 5 38 77 17 23 0 1 2 3 4 5 6 7 8 root index left child of 44 right child of 44 Level # 1 2 3 4
  • 29. Heap Constraints A heap must satisfy the following two constraints: Structural Constraint : Nodes in a heap with N nodes must occupy the positions numbered 0, 1, ..., N-1. Value Relationship Constraint : A value stored in a node must be larger than the maximum of the values stored in its left and right children.
  • 30. Structural Constraints Sample heaps and nonheaps that violate the structural constraints: Nonheaps Heaps
  • 31. Value Relationship Constraints Sample heaps and nonheaps that violate the value relationship constraints: Nonheaps Heaps 45 25 16 3 12 22 45 12 34 11 22 9 90 35 24 13 16 12 45 55 16 3 12 58 45 25 33 34 23 22 45 25 55 3 12 22
  • 32. Heapsort Algorithm How can we use the heap structure to sort N elements? Heapsort is carried out in two phases: Construction Phase : Construct a heap with given N elements. Extraction Phase : Pull out the value in the root successively, creating a new heap with one less element after each extraction.
  • 33. Extraction Phase After each extraction, a heap must be rebuilt with one less element. One sample extraction step: 90 23 > max{84, 44}? NO, so swap. 23 > max{77, 12}? NO, so swap. 23 > max{17}? YES, so stop. Before After 90 84 44 12 5 38 77 17 23 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 90 23 84 44 12 5 38 77 17 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 90 84 23 44 12 5 38 77 17 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 90 84 77 44 12 5 38 23 17 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 90 84 77 44 12 5 38 23 17 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 90 90 84 44 12 5 38 77 17 23 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
  • 34. Rebuild Steps A sequence of rebuild steps to sort the list. 90 84 77 44 38 23 17 12 5 Sorting was completed after 8 rebuild steps. 90 84 44 12 5 38 77 17 23 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 90 84 44 12 5 38 77 17 23 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 Before 90 84 77 44 12 5 38 23 17 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 90 84 77 23 44 12 5 38 17 0 1 2 3 4 5 6 0 1 2 3 4 5 6 7 8 90 84 77 44 23 38 12 5 17 0 1 2 3 4 5 0 1 2 3 4 5 6 7 8 90 84 77 44 38 23 5 12 17 0 1 2 3 4 0 1 2 3 4 5 6 7 8 90 84 77 44 38 23 17 5 12 0 1 2 3 0 1 2 3 4 5 6 7 8 90 84 77 44 38 23 17 12 5 0 1 2 0 1 2 3 4 5 6 7 8 90 84 77 44 38 23 17 12 5 0 1 0 1 2 3 4 5 6 7 8 90 84 77 44 38 23 17 12 5 0 0 1 2 3 4 5 6 7 8 90 84 77 44 38 23 17 12 5 0 1 2 3 4 5 6 7 8 90 84 77 44 38 23 17 12 5 Done
  • 35. Construction Phase Rebuild steps are applied from position  (N-2)/2  to position 0. Before 23 17 5 12 44 38 90 84 77 0 1 2 3 4 5 6 7 8 23 17 5 12 44 38 90 84 77 0 1 2 3 4 5 6 7 8 3  (9-2)/2  = 3 23 17 5 12 44 38 90 84 77 0 1 2 3 4 5 6 7 8 2 23 17 44 12 5 38 90 84 77 0 1 2 3 4 5 6 7 8 1 23 90 44 12 5 38 84 17 77 0 1 2 3 4 5 6 7 8 0 90 84 44 12 5 38 77 17 23 0 1 2 3 4 5 6 7 8 Done
  • 36. Heap Implementation We need to implement the abstract data structure heap into a concrete data structure. 90 84 44 12 5 38 77 17 23 0 1 2 3 4 5 6 7 8 Abstract Heap Structure Concrete Implementation 0 1 2 3 4 5 6 7 8 23 17 38 5 12 77 44 84 90
  • 37. The construct Method private void construct ( ) { for ( int i = ( heap.length-2 ) / 2; i >= 0; i-- ) { current = i; done = false ; while ( !done ) { if ( current has no children ) { done = true; } else { if ( current node < larger child ) { swap the two nodes ; set current points to the larger child ; } else { done = true ; } } } } }
  • 38. The extract Method private void extract ( ) { for ( int size = heap.length-1; size >= 0; size-- ) { remove the root node data ; move the last node to the root; done = false ; //rebuild the heap with one less element while ( !done ) { if ( current has no children ) { done = true ; } else { if ( current node < larger child ) { swap the two nodes ; set current points to the larger child ; } else { done = true ; } } } } }
  • 39. Heapsort Performance The total number of comparisons in the extraction phase is (N-1) ļ‚“ K where K is the depth of a heap. We solve for K using the fact that the heap must satisfy the structural constraint: Therefore, total # nodes in a heap with depth K this holds because of the structural constraint
  • 40. Heapsort Performance (cont'd) There are N/2 rebuild steps in the construction phase. Each rebuild step will take no more than K comparisons. The total number of comparisons in the construction phase is approximately Therefore, the total number of comparisons for both phases is
  • 41. Problem Statement Problem statement: Add the sorting capability to the AddressBook class from Chapter 10. The new AddressBook class will include a method that sort Person objects in alphabetical order of their names or in ascending order of their ages.
  • 42. Overall Plan Instead of going through the development steps, we will present three different implementations. The three versions are named AddressBookVer1, AddressBookVer2, and AddressBookVer3. These classes will implement the AddressBook interface.
  • 43. The AddressBook Interface interface AddressBook { public void add ( Person newPerson ) ; public boolean delete ( String searchName ) ; public Person search ( String searchName ) ; public Person [ ] sort ( int attribute ) ; }
  • 44. AddressBookVer1 Design We use an array of Person objects We provide our own sorting method in the AddressBookVer1 class We define the Person class so we can compare Person objects by name or by age
  • 45. Comparing Person Objects First, we need to determine how to compare Person objects The following does not make sense: Person p1 = …; Person p2 = …; if ( p1 < p2 ) { … }
  • 46. Modify the Person Class Modify the Person class to include a variable that tells which attribute to compare. class Person { … public static final int NAME = 0; public static final int AGE = 1; public static int compareAttribute = NAME; … public static void setCompareAttribute ( int attribute ) { compareAttribute = attribute; } … }
  • 47. The compareTo Method To compare Person objects, first set the comparison attribute and then call the compareTo Method. Person.setCompareAttribute (Person.NAME); int compResult = p1.compareTo ( p2 ) ; if ( compResult < 0 ) { //p1 ā€œless thanā€ p2 } else if ( compResult == 0 ) { //p1 ā€œequalsā€ pw } else { //p2 ā€œgreater thanā€ p2 } public int compareTo ( Person p ) { int compResult; if ( comparisonAttribute == AGE ) { int p2age = p.getAge(); if ( this .age < p2age ) { compResult = LESS; } … } else { //compare Name String p2Name = p.getName () ; compResult = this .name. compareTo ( p2Name ) ; } return compResult; }
  • 48. The sort Method public Person [ ] sort ( int attribute ) { Person [ ] sortedList = new Person [ count ] ; Person p1, p2, temp; //copy references to sortedList for ( int i = 0; i < count; i++ ) { sortedList [ i ] = entry [ i ] ; } //Set the comparison attribute Person.setCompareAttribute ( attribute ) ; //begin the bubble sort on sortedList … } return sortedList; }
  • 49. The Use of sortedList in the sort Method
  • 50. AddressBookVer1 Code Directory: Chapter11/ Source Files: AddressBookVer1.java Program source file is too big to list here. From now on, we ask you to view the source files using your Java IDE.
  • 51. AddressBookVer2 Design We use the java.util.Arrays class to sort an array of Person objects The Person class does not include any comparison methods. Instead, we implement the Comparator interface. We can define the implementation class so we can compare Person objects using any combination of their attributes For example, we can define a comparator that compares Person objects by using both name and age
  • 52. The AgeComparator Class This class compares the age attributes of Person objects class AgeComparator implements Comparator { private final int LESS = -1; private final int EQUAL = 0; private final int MORE = 1; public int compare ( Object p1, Object p2 ) { int comparisonResult; int p1age = (( Person ) p1 ) .getAge ( ) ; int p2age = (( Person ) p2 ) .getAge ( ) ; if ( p1age < p2age ) { comparisonResult = LESS; } else if ( p1age == p2age ) { comparisonResult = EQUAL; } else { assert p1age > p2age; comparisonResult = MORE; } return comparisonResult; } }
  • 53. The NameComparator Class This class compares the age attributes of Person objects Because the name attribute is a string we can use the compareTo method of the String class class NameComparator implements Comparator { public int compare ( Object p1, Object p2 ) { String p1name = (( Person ) p1 ) .getName ( ) ; String p2name = (( Person ) p2 ) .getName ( ) ; return p1name.compareTo ( p2name ) ; } }
  • 54. The sort Method We use the sort method of the java.util.Arrays class public Person [ ] sort ( int attribute ) { if ( ! ( attribute == Person.NAME || attribute == Person.AGE ) ) { throw new IllegalArgumentException ( ) ; } Person [ ] sortedList = new Person [ count ] ; //copy references to sortedList for ( int i = 0; i < count; i++ ) { sortedList [ i ] = entry [ i ] ; } Arrays.sort ( sortedList, getComparator ( attribute )) ; return sortedList; }
  • 55. AddressBookVer2 Code Directory: Chapter11/ Source Files: AddressBookVer2.java Program source file is too big to list here. From now on, we ask you to view the source files using your Java IDE.
  • 56. AddressBookVer3 Design In the previous two versions, we used an array data structure to maintain a collection of Person objects In the third version, we don't use an array at all. Instead, we use a Map from the Java Collection Framework to maintain a collection of Person objects. We use the person's name as the key of a Map entry and the person object as the value of a Map entry.
  • 57. The sort Method We retrieve a collection of values in the map, converts it to an array, and use the sort method of the java.util.Arrays class to sort this array. public Person [ ] sort ( int attribute ) { if ( ! ( attribute == Person.NAME || attribute == Person.AGE ) ) { throw new IllegalArgumentException ( ) ; } Person [ ] sortedList = new Person [ entry.size ()] ; entry.values () .toArray ( sortedList ) ; Arrays.sort ( sortedList, getComparator ( attribute )) ; return sortedList; }
  • 58. AddressBookVer3 Code Directory: Chapter11/ Source Files: AddressBookVer3.java Program source file is too big to list here. From now on, we ask you to view the source files using your Java IDE.

Editor's Notes

  • #7: Note: In the case of unsuccessful search, all elements in the array are compared against the search value, so the total number of comparisons is N. However, the actual number of times the while loop is executed is N+1 because we need one more go around to determine that loc becomes equal to number.length .
  • #18: Note: The value of log 2 N is a real number. Since the number of comparisons done is an integer, the result of log 2 N is rounded up to an integer in the third column.
  • #21: The figure shows the whole eight passes. The illustration for each pass shows the state right BEFORE the exchange was made for that pass. The illustrations in the slide show the state AFTER the exchange was made for that pass.
  • #25: What is the meaning behind the name ā€œbubbleā€ sort? Notice the effect of one pass is to migrate the largest element to the last position of the array. In addition, because we are exchanging the pairs if they are out of order, other elements migrate toward the end of the array. If we view the array vertically with the first position at the bottom and the last position at the top, the data movements we see is like bubbles moving toward the surface of water.
  • #26: The bubble sort routine is implemented by exploiting the following two properties: 1. After one pass through the array, the largest element will be at the end of the array. 2. During one pass, if no pair of consecutive entries is out of order, then the array is sorted.
  • #27: The selection sort will carry out N-1 passes no matter what. Whether the array is already sorted or very close to being sorted does not matter to the selection sort. It will carry out the same number of comparisons in sorting a given array. The bubble sort, on the other hand, can detect if the array is or has become sorted during the sorting process. So the bubble sort is adaptable, it does fewer comparisons for the arrays that are closer to being sorted than those that are not. In addition to the larger number of data movements during a single pass, the capability of checking the ā€œsortednessā€ of the array enables the bubble sort routine to complete the whole sorting process much quicker than the selection sort. Indeed, the only situation that causes the bubble sort routine to execute the worst case number of comparisons is when the original array is in the reverse order (i.e., in descending order).
  • #29: We use integers as data values for the examples in this section. The topmost node is called the root of a heap. Nodes in a heap are indexed 0, 1, 2, and so forth in the top-to-bottom, left-to-right order starting from the root. A node in a heap has either zero, one, or two children. The children of a node are distinguished as the node’s left and right children. If a node has only one child, then it is the left child of the node.
  • #37: The heap structure can be characterized as an abstract data structure because the Java language (and others) does not include such data structure as a part of its language definition. An array is a concrete data structure that is a part of the Java language and the one which we can use effectively here to implement the abstract data structure heap. This slide shows the correspondence between the heap and the array representation. An important aspect in deciding which data structure to use is the ease of locating a given node’s left and right child. With an array implementation, we can locate any node’s left and right child easily. A node with index I has its left child at index 2ƞI + 1 and right child at index 2ƞI + 2.
  • #38: private void construct( ) { int current, maxChildIndex; boolean done; for (int i = (heap.length-2) / 2; i &gt;= 0; i--) { current = i; done = false; while ( !done ) {//perform one rebuild step //with the node at index i if ( 2*current+1 &gt; heap.length-1 ) { //current node has no children, so stop done = true; } else { //current node has at least one child, //get the index of larger child maxChildIndex = maxChild( current, heap.length-1 ); if ( heap[current] &lt; heap[maxChildIndex] ) { //a child is larger, so swap and continue swap( current, maxChildIndex ); current = maxChildIndex; } else { //the value relationship constraint //is satisfied, so stop done = true; } } } } testPrint( heap.length ); //TEMP }
  • #39: private void extract( ) { int current, maxChildIndex; boolean done; for (int size = heap.length-1; size &gt;= 0; size--) { //remove the root node data sortedList[size] = heap[ 0 ]; //move the last node to the root heap[ 0 ] = heap[size]; //rebuild the heap with one less element current = 0; done = false; while ( !done ) { if ( 2*current+1 &gt; size ) {//current node has no children, so stop done = true; } else { //current node has at least one child, //get the index of larger child maxChildIndex = maxChild( current, size ); if ( heap[current] &lt; heap[maxChildIndex] ) { //a child is larger, so swap and continue swap( current, maxChildIndex ); current = maxChildIndex; } else { //value relationship constraint //is satisfied, so stop done = true; } } } testPrint( size ); //TEMP } }
  • #48: public int compareTo( Person person ) { int comparisonResult; if ( compareAttribute == AGE ) { int p2age = person.getAge( ); if (this.age &lt; p2age) { comparisonResult = LESS; } else if (this.age == p2age) { comparisonResult = EQUAL; } else { //this.age &gt; p2age comparisonResult = MORE; } } else { //compare names with String’s compareTo String p2name = person.getName( ); comparisonResult = this.name.compareTo( p2name ); } return comparisonResult; }
  • #49: public Person[ ] sort ( int attribute ) { Person[ ] sortedList = new Person[ count ]; Person p1, p2, temp; //copy references to sortedList; see Figure 10.17 for (int i = 0; i &lt; count; i++) { sortedList[i] = entry[i]; } //Set the comparison attribute Person.setCompareAttribute( attribute ); //begin the bubble sort on sortedList int bottom, i, comparisonResult; boolean exchanged = true; bottom = sortedList.length - 2; while ( exchanged ) { exchanged = false; for (i = 0; i &lt;= bottom; i++) { p1 = sortedList[i]; p2 = sortedList[i+1]; comparisonResult = p1.compareTo(p2, attribute); if ( comparisonResult &gt; 0 ) { //p1 is &apos;larger&apos; sortedList[i] = p2; //than p2,so sortedList[i+1] = p1; //exchange exchanged = true; //exchange is made } } bottom--; } return sortedList; }
  • #51: Please use your Java IDE to view the source files and run the program.
  • #56: Please use your Java IDE to view the source files and run the program.
  • #59: Please use your Java IDE to view the source files and run the program.