SlideShare une entreprise Scribd logo
1  sur  40
HeapSort

CS 3358 Data Structures




                          1
Heapsort: Basic Idea

Problem: Arrange an array of items into sorted order.

1) Transform the array of items into a heap.
2) Invoke the “retrieve & delete” operation repeatedly, to
   extract the largest item remaining in the heap, until the
   heap is empty. Store each item retrieved from the heap
   into the array from back to front.
Note: We will refer to the version of heapRebuild used by
  Heapsort as rebuildHeap, to distinguish it from the version
  implemented for the class PriorityQ.

                                                               2
Transform an Array Into a Heap: Example
                  6       3   5   7    2    4    10    9
                  0       1   2   3    4    5    6     7
rebuildHeap

                      6
                                       • The items in the array, above,
                                         can be considered to be
                                         stored in the complete binary
        3                     5          tree shown at right.
                                       • Note that leaves 2, 4, 9 & 10
                                         are heaps; nodes 5 & 7 are
    7         2           4       10     roots of semiheaps.
                                       • rebuildHeap is invoked on
9                                        the parent of the last node in
                                         the array (= 9).
                                                                     3
4
5
6
7
8
9
Transform an Array Into a Heap: Example
                  6       3   5   9    2    4   10    7
                  0       1   2   3    4    5    6    7
rebuildHeap
                                       • Note that nodes 2, 4, 7, 9 &
                      6                  10 are roots of heaps; nodes
                                         3 & 5 are roots of semiheaps.
        3                     5        • rebuildHeap is invoked on
                                         the node in the array
                                         preceding node 9.
    9         2           4       10


7

                                                                    10
Transform an Array Into a Heap: Example
                  6       3   10   9   2    4    5     7
                  0       1   2    3   4    5     6    7
rebuildHeap
                                       • Note that nodes 2, 4, 5, 7, 9
                      6                  & 10 are roots of heaps;
                                         node 3 is the root of a
        3                     10         semiheap.
                                       • rebuildHeap is invoked on
                                         the node in the array
    9         2           4        5     preceding node 10.


7

                                                                     11
Transform an Array Into a Heap: Example
                  6       3   10   9   2    4    5     7
                  0       1   2    3   4    5     6    7
rebuildHeap
                                       • Note that nodes 2, 4, 5, 7, 9
                      6                  & 10 are roots of heaps;
                                         node 3 is the root of a
        3                     10         semiheap.
                                       • rebuildHeap is invoked on
                                         the node in the array
    9         2           4        5     preceding node 10.


7

                                                                     12
Transform an Array Into a Heap: Example
                  6       9   10   3   2    4    5    7
                  0       1   2    3   4    5    6    7
rebuildHeap
                                       • Note that nodes 2, 4, 5, 7 &
                      6                  10 are roots of heaps; node 3
                                         is the root of a semiheap.
        9                     10       • rebuildHeap is invoked
                                         recursively on node 3 to
                                         complete the transformation
    3         2           4        5     of the semiheap rooted at 9
                                         into a heap.
7

                                                                    13
Transform an Array Into a Heap: Example
                  6       9   10   7   2    4     5    3
                  0       1   2    3   4    5     6    7
rebuildHeap
                                       • Note that nodes 2, 3, 4, 5, 7,
                      6                  9 & 10 are roots of heaps;
                                         node 6 is the root of a
        9                     10         semiheap.
                                       • The recursive call to
                                         rebuildHeap returns to node
    7         2           4        5     9.
                                       • rebuildHeap is invoked on
                                         the node in the array
3
                                         preceding node 9.
                                                                     14
Transform an Array Into a Heap: Example
                10    9   6   7   2    4    5    3
                0     1   2   3   4    5    6    7


                 10               • Note that node 10 is now the
                                    root of a heap.
                                  • The transformation of the
        9                 6
                                    array into a heap is complete.

    7       2         4       5


3

                                                               15
Transform an Array Into a Heap (Cont’d.)

• Transforming an array into a heap begins by invoking
   rebuildHeap on the parent of the last node in the array.
• Recall that in an array-based representation of a complete binary
  tree, the parent of any node at array position, i, is
                             (i – 1) / 2 
• Since the last node in the array is at position n – 1, it follows
  that transforming an array into a heap begins with the node at
  position
                    (n – 2) / 2  =  n / 2  – 1
  and continues with each preceding node in the array.


                                                                      16
Transform an Array Into a Heap: C++

// transform array a[ ], containing n items, into a heap
for( int root = n/2 – 1; root >= 0; root – – )
{
  // transform a semiheap with the given root into a heap
      rebuildHeap( a, root, n );
}




                                                            17
Rebuild a Heap: C++
// transform a semiheap with the given root into a heap
void rebuildHeap( ItemType a[ ], int root, int n )
{ int child = 2 * root + 1;         // set child to root’s left child, if any
    if( child < n )                 // if root’s left child exists . . .
    { int rightChild = child + 1;
       if( rightChild < n && a[ rightChild ] > a[ child ] )
          child = rightChild;       // child indicates the larger item
       if( a[ root ] < a[ child ] )
       { swap( a[ root ], a[ child ] );
          rebuildHeap( a, child, n );
       }
    }
}
                                                                           18
Transform a Heap Into a Sorted Array

• After transforming the array of items into a heap, the next
  step in Heapsort is to:
   – invoke the “retrieve & delete” operation repeatedly, to
      extract the largest item remaining in the heap, until the
      heap is empty. Store each item retrieved from the heap
      into the array from back to front.
• If we want to perform the preceding step without using
  additional memory, we need to be careful about how we
  delete an item from the heap and how we store it back into
  the array.

                                                              19
Transform a Heap Into a Sorted Array:
                   Basic Idea
Problem: Transform array a[ ] from a heap of n items into a
  sequence of n items in sorted order.
Let last represent the position of the last node in the heap. Initially,
   the heap is in a[ 0 .. last ], where last = n – 1.
1) Move the largest item in the heap to the beginning of an (initially
   empty) sorted region of a[ ] by swapping a[0] with a[ last ].
2) Decrement last. a[0] now represents the root of a semiheap in
     a[ 0 .. last ], and the sorted region is in a[ last + 1 .. n – 1 ].
3) Invoke rebuildHeap on the semiheap rooted at a[0] to transform
   the semiheap into a heap.
4) Repeat steps 1 - 3 until last = -1. When done, the items in array
     a[ ] will be arranged in sorted order.
                                                                       20
Transform a Heap Into a Sorted Array: Example
                0    1   2   3   4     5    6    7
        a[ ]: 10     9   6   7   2     4    5    3
                             Heap

                10               • We start with the heap that
                                   we formed from an unsorted
                                   array.
        9                6
                                 • The heap is in a[0..7] and the
                                   sorted region is empty.
    7       2        4       5   • We move the largest item in
                                   the heap to the beginning of
                                   the sorted region by
3                                  swapping a[0] with a[7].
                                                                 21
Transform a Heap Into a Sorted Array: Example
                  0       1       2   3   4    5     6    7
        a[ ]:     3       9       6   7   2    4     5   10
                                  Semiheap               Sorted
rebuildHeap
                                          • a[0..6] now represents a
                      3                     semiheap.
                                          • a[7] is the sorted region.
       9                          6
                                          • Invoke rebuildHeap on the
                                            semiheap rooted at a[0].

   7          2               4       5


                                                                         22
Transform a Heap Into a Sorted Array: Example
                  0       1         2   3    4      5    6    7
        a[ ]:     9       3         6   7    2      4    5    10
                                  Becoming a Heap             Sorted
rebuildHeap
                                            • rebuildHeap is invoked
                      9                          recursively on a[1] to
                                                 complete the transformation
                                                 of the semiheap rooted at a[0]
       3                            6            into a heap.


   7          2               4         5


                                                                            23
Transform a Heap Into a Sorted Array: Example
              0       1       2    3     4     5    6    7
      a[ ]:   9       7       6    3     2    4     5    10
                                  Heap                   Sorted

                                         • a[0] is now the root of a heap
                  9                        in a[0..6].
                                         • We move the largest item in
                                           the heap to the beginning of
      7                       6            the sorted region by
                                           swapping a[0] with a[6].
  3       2               4        5


                                                                       24
Transform a Heap Into a Sorted Array: Example
                  0       1        2   3     4     5    6     7
        a[ ]:     5       7        6   3     2     4    9    10
                                  Semiheap              Sorted
rebuildHeap
                                             • a[0..5] now represents a
                      5                        semiheap.
                                             • a[6..7] is the sorted region.
       7                           6
                                             • Invoke rebuildHeap on the
                                               semiheap rooted at a[0].

   3          2               4


                                                                               25
Transform a Heap Into a Sorted Array: Example
                  0       1       2   3   4     5    6     7
        a[ ]:     7       5       6   3   2     4    9    10
                                  Heap               Sorted
rebuildHeap
                                          • Since a[1] is the root of a
                      7                     heap, a recursive call to
                                            rebuildHeap does nothing.
                                          • a[0] is now the root of a heap
       5                          6         in a[0..5].
                                          • We move the largest item in
   3          2               4             the heap to the beginning of
                                            the sorted region by
                                            swapping a[0] with a[5].
                                                                          26
Transform a Heap Into a Sorted Array: Example
                  0       1      2   3   4     5     6      7
        a[ ]:     4       5      6   3   2     7     9      10
                              Semiheap             Sorted
rebuildHeap
                                         • a[0..4] now represents a
                      4                    semiheap.
                                         • a[5..7] is the sorted region.
       5                         6
                                         • Invoke rebuildHeap on the
                                           semiheap rooted at a[0].

   3          2


                                                                           27
Transform a Heap Into a Sorted Array: Example
              0       1    2     3   4     5     6      7
      a[ ]:   6       5    4     3   2    7      9      10
                          Heap                 Sorted

                                     • a[0] is now the root of a heap
                  6                    in a[0..4].
                                     • We move the largest item in
                                       the heap to the beginning of
      5                    4           the sorted region by
                                       swapping a[0] with a[4].
  3       2


                                                                   28
Transform a Heap Into a Sorted Array: Example
                0        1   2     3   4     5    6     7
        a[ ]:   2        5   4     3   6     7    9    10
                        Semiheap             Sorted
rebuildHeap
                                       • a[0..3] now represents a
                    2                    semiheap.
                                       • a[4..7] is the sorted region.
       5                      4
                                       • Invoke rebuildHeap on the
                                         semiheap rooted at a[0].

   3


                                                                         29
Transform a Heap Into a Sorted Array: Example
                0       1   2   3   4    5     6    7
        a[ ]:   5       2   4   3   6    7     9   10
                Becoming a Heap          Sorted
rebuildHeap
                                    • rebuildHeap is invoked
                    5                 recursively on a[1] to
                                      complete the transformation
                                      of the semiheap rooted at a[0]
       2                    4         into a heap.


   3


                                                                 30
Transform a Heap Into a Sorted Array: Example
              0       1   2      3   4     5    6    7
      a[ ]:   5       3   4      2   6    7     9    10
                      Heap                 Sorted

                                     • a[0] is now the root of a heap
                  5                    in a[0..3].
                                     • We move the largest item in
                                       the heap to the beginning of
      3                      4         the sorted region by
                                       swapping a[0] with a[3].
  2


                                                                   31
Transform a Heap Into a Sorted Array: Example
                0       1   2      3   4     5      6   7
        a[ ]:   2       3   4      5   6     7      9   10
                    Semiheap               Sorted
rebuildHeap
                                       • a[0..2] now represents a
                    2                    semiheap.
                                       • a[3..7] is the sorted region.
       3                       4
                                       • Invoke rebuildHeap on the
                                         semiheap rooted at a[0].




                                                                         32
Transform a Heap Into a Sorted Array: Example
             0        1     2   3   4     5      6   7
     a[ ]:   4        3     2   5   6     7      9   10
                     Heap               Sorted

                                    • a[0] is now the root of a heap
                 4                    in a[0..2].
                                    • We move the largest item in
                                      the heap to the beginning of
     3                      2         the sorted region by
                                      swapping a[0] with a[2].




                                                                  33
Transform a Heap Into a Sorted Array: Example
                 0       1   2   3   4     5    6     7
        a[ ]:    2       3   4   5   6     7    9    10
                Semiheap             Sorted
rebuildHeap
                                     • a[0..1] now represents a
                     2                 semiheap.
                                     • a[2..7] is the sorted region.
       3
                                     • Invoke rebuildHeap on the
                                       semiheap rooted at a[0].




                                                                       34
Transform a Heap Into a Sorted Array: Example
             0       1   2   3   4     5    6    7
     a[ ]:   3       2   4   5   6    7     9    10
             Heap                Sorted

                                 • a[0] is now the root of a heap
                 3                 in a[0..1].
                                 • We move the largest item in
                                   the heap to the beginning of
     2                             the sorted region by
                                   swapping a[0] with a[1].




                                                               35
Transform a Heap Into a Sorted Array: Example
             0       1   2   3     4      5   6    7
     a[ ]:   2       3   4   5     6      7   9   10
         Heap                    Sorted

                                  • a[1..7] is the sorted region.
                 2                • Since a[0] is a heap, a
                                    recursive call to rebuildHeap
                                    does nothing.
                                  • We move the only item in the
                                    heap to the beginning of the
                                    sorted region.


                                                                    36
Transform a Heap Into a Sorted Array: Example
             0   1   2   3   4       5    6     7
     a[ ]:   2   3   4   5   6       7    9     10
                         Sorted

                             • Since the sorted region
                                  contains all the items in the
                                  array, we are done.




                                                                  37
Heapsort: C++
void heapsort( ItemType a[ ], int n )
{ // transform array a[ ] into a heap
      for( int root = n/2 – 1; root >= 0; root – – )
         rebuildHeap( a, root, n );
    for( int last = n – 1; last > 0; )
    { // move the largest item in the heap, a[ 0 .. last ], to the
       // beginning of the sorted region, a[ last+1 .. n–1 ], and
       // increase the sorted region
          swap( a[0], a[ last ] ); last – – ;
        // transform the semiheap in a[ 0 .. last ] into a heap
            rebuildHeap( a, 0, last );
    }
}
                                                                     38
Heapsort: Efficiency
• rebuildHeap( ) is invoked  n / 2  times to transform an array of
    n items into a heap. rebuildHeap( ) is then called n – 1 more
    times to transform the heap into a sorted array.
•   From our analysis of the heap-based, Priority Queue, we saw
    that rebuilding a heap takes O( log n ) time in the best, average,
    and worst cases.
•   Therefore, Heapsort requires
           O( [  n / 2  + (n – 1) ] * log n ) = O( n log n )
    time in the best, average and worst cases.
•   This is the same growth rate, in all cases, as Mergesort, and the
    same best and average cases as Quicksort.
•   Knuth’s analysis shows that, in the average case, Heapsort
    requires about twice as much time as Quicksort, and 1.5 times as
    much time as Mergesort (without requiring additional storage).
                                                                    39
Growth Rates for Selected Sorting Algorithms
                       Best case      Average case (†)       Worst case
    Selection sort         n2                n2                  n2
    Bubble sort             n                n2                  n2
    Insertion sort          n                n2                  n2
    Mergesort          n * log2 n        n * log2 n          n * log2 n
    Heapsort           n * log2 n        n * log2 n          n * log2 n
    Treesort           n * log2 n        n * log2 n              n2
    Quicksort          n * log2 n        n * log2 n              n2
    Radix sort              n                 n                   n
†
 According to Knuth, the average growth rate of Insertion sort is about
0.9 times that of Selection sort and about 0.4 times that of Bubble Sort.
Also, the average growth rate of Quicksort is about 0.74 times that of
Mergesort and about 0.5 times that of Heapsort.
                                                                            40

Contenu connexe

Tendances

Lec 17 heap data structure
Lec 17 heap data structureLec 17 heap data structure
Lec 17 heap data structureSajid Marwat
 
Heap Sort || Heapify Method || Build Max Heap Algorithm
Heap Sort || Heapify Method || Build Max Heap AlgorithmHeap Sort || Heapify Method || Build Max Heap Algorithm
Heap Sort || Heapify Method || Build Max Heap AlgorithmLearning Courses Online
 
Trees data structure
Trees data structureTrees data structure
Trees data structureSumit Gupta
 
Data Structures - Lecture 9 [Stack & Queue using Linked List]
 Data Structures - Lecture 9 [Stack & Queue using Linked List] Data Structures - Lecture 9 [Stack & Queue using Linked List]
Data Structures - Lecture 9 [Stack & Queue using Linked List]Muhammad Hammad Waseem
 
Bubble sort
Bubble sortBubble sort
Bubble sortManek Ar
 
Hashing Technique In Data Structures
Hashing Technique In Data StructuresHashing Technique In Data Structures
Hashing Technique In Data StructuresSHAKOOR AB
 
Dijkstra s algorithm
Dijkstra s algorithmDijkstra s algorithm
Dijkstra s algorithmmansab MIRZA
 
Dijkstra’s algorithm
Dijkstra’s algorithmDijkstra’s algorithm
Dijkstra’s algorithmfaisal2204
 
Data Structures - Lecture 8 [Sorting Algorithms]
Data Structures - Lecture 8 [Sorting Algorithms]Data Structures - Lecture 8 [Sorting Algorithms]
Data Structures - Lecture 8 [Sorting Algorithms]Muhammad Hammad Waseem
 
Non Linear Data Structures
Non Linear Data StructuresNon Linear Data Structures
Non Linear Data StructuresAdarsh Patel
 
Selection sort
Selection sortSelection sort
Selection sortamna izzat
 
Introduction on Prolog - Programming in Logic
Introduction on Prolog - Programming in LogicIntroduction on Prolog - Programming in Logic
Introduction on Prolog - Programming in LogicVishal Tandel
 
Binary Search - Design & Analysis of Algorithms
Binary Search - Design & Analysis of AlgorithmsBinary Search - Design & Analysis of Algorithms
Binary Search - Design & Analysis of AlgorithmsDrishti Bhalla
 

Tendances (20)

Heaps
HeapsHeaps
Heaps
 
Lec 17 heap data structure
Lec 17 heap data structureLec 17 heap data structure
Lec 17 heap data structure
 
Priority queues
Priority queuesPriority queues
Priority queues
 
Linear Search Presentation
Linear Search PresentationLinear Search Presentation
Linear Search Presentation
 
Heap Sort || Heapify Method || Build Max Heap Algorithm
Heap Sort || Heapify Method || Build Max Heap AlgorithmHeap Sort || Heapify Method || Build Max Heap Algorithm
Heap Sort || Heapify Method || Build Max Heap Algorithm
 
Trees data structure
Trees data structureTrees data structure
Trees data structure
 
Greedy algorithms
Greedy algorithmsGreedy algorithms
Greedy algorithms
 
Data Structures - Lecture 9 [Stack & Queue using Linked List]
 Data Structures - Lecture 9 [Stack & Queue using Linked List] Data Structures - Lecture 9 [Stack & Queue using Linked List]
Data Structures - Lecture 9 [Stack & Queue using Linked List]
 
Bubble sort
Bubble sortBubble sort
Bubble sort
 
Hashing Technique In Data Structures
Hashing Technique In Data StructuresHashing Technique In Data Structures
Hashing Technique In Data Structures
 
Heap sort
Heap sort Heap sort
Heap sort
 
Dijkstra s algorithm
Dijkstra s algorithmDijkstra s algorithm
Dijkstra s algorithm
 
Linked List
Linked ListLinked List
Linked List
 
Dijkstra’s algorithm
Dijkstra’s algorithmDijkstra’s algorithm
Dijkstra’s algorithm
 
Data Structures - Lecture 8 [Sorting Algorithms]
Data Structures - Lecture 8 [Sorting Algorithms]Data Structures - Lecture 8 [Sorting Algorithms]
Data Structures - Lecture 8 [Sorting Algorithms]
 
Non Linear Data Structures
Non Linear Data StructuresNon Linear Data Structures
Non Linear Data Structures
 
String matching algorithms
String matching algorithmsString matching algorithms
String matching algorithms
 
Selection sort
Selection sortSelection sort
Selection sort
 
Introduction on Prolog - Programming in Logic
Introduction on Prolog - Programming in LogicIntroduction on Prolog - Programming in Logic
Introduction on Prolog - Programming in Logic
 
Binary Search - Design & Analysis of Algorithms
Binary Search - Design & Analysis of AlgorithmsBinary Search - Design & Analysis of Algorithms
Binary Search - Design & Analysis of Algorithms
 

En vedette

Heapsort
HeapsortHeapsort
Heapsortmmoylan
 
Quick Sort , Merge Sort , Heap Sort
Quick Sort , Merge Sort ,  Heap SortQuick Sort , Merge Sort ,  Heap Sort
Quick Sort , Merge Sort , Heap SortMohammed Hussein
 
Quick and Heap Sort with examples
Quick and Heap Sort with examplesQuick and Heap Sort with examples
Quick and Heap Sort with examplesBst Ali
 
Design and analysis of computer algorithms
Design and analysis of computer algorithmsDesign and analysis of computer algorithms
Design and analysis of computer algorithms Krishna Chaytaniah
 
Priority queues and heap sorting
Priority queues and heap sortingPriority queues and heap sorting
Priority queues and heap sortingheshekik
 
практическая работа построение диаграмм
практическая работа построение диаграммпрактическая работа построение диаграмм
практическая работа построение диаграммliza2209
 
Effect of Solar Variability on the Helioshphere and Cosmic Rays
Effect of Solar Variability on the Helioshphere and Cosmic RaysEffect of Solar Variability on the Helioshphere and Cosmic Rays
Effect of Solar Variability on the Helioshphere and Cosmic Raysijsrd.com
 

En vedette (15)

Heapsort
HeapsortHeapsort
Heapsort
 
Heap sort
Heap sortHeap sort
Heap sort
 
Quick Sort , Merge Sort , Heap Sort
Quick Sort , Merge Sort ,  Heap SortQuick Sort , Merge Sort ,  Heap Sort
Quick Sort , Merge Sort , Heap Sort
 
Algoritmo de ordenamiento: Heap Sort
Algoritmo de ordenamiento: Heap SortAlgoritmo de ordenamiento: Heap Sort
Algoritmo de ordenamiento: Heap Sort
 
chapter - 6.ppt
chapter - 6.pptchapter - 6.ppt
chapter - 6.ppt
 
Data Structure (Heap Sort)
Data Structure (Heap Sort)Data Structure (Heap Sort)
Data Structure (Heap Sort)
 
Heaps
HeapsHeaps
Heaps
 
Heaps & priority queues
Heaps & priority queuesHeaps & priority queues
Heaps & priority queues
 
Quick and Heap Sort with examples
Quick and Heap Sort with examplesQuick and Heap Sort with examples
Quick and Heap Sort with examples
 
Design and analysis of computer algorithms
Design and analysis of computer algorithmsDesign and analysis of computer algorithms
Design and analysis of computer algorithms
 
Heapsort
HeapsortHeapsort
Heapsort
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Priority queues and heap sorting
Priority queues and heap sortingPriority queues and heap sorting
Priority queues and heap sorting
 
практическая работа построение диаграмм
практическая работа построение диаграммпрактическая работа построение диаграмм
практическая работа построение диаграмм
 
Effect of Solar Variability on the Helioshphere and Cosmic Rays
Effect of Solar Variability on the Helioshphere and Cosmic RaysEffect of Solar Variability on the Helioshphere and Cosmic Rays
Effect of Solar Variability on the Helioshphere and Cosmic Rays
 

Dernier

Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 

Dernier (20)

Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 

Heap sort

  • 1. HeapSort CS 3358 Data Structures 1
  • 2. Heapsort: Basic Idea Problem: Arrange an array of items into sorted order. 1) Transform the array of items into a heap. 2) Invoke the “retrieve & delete” operation repeatedly, to extract the largest item remaining in the heap, until the heap is empty. Store each item retrieved from the heap into the array from back to front. Note: We will refer to the version of heapRebuild used by Heapsort as rebuildHeap, to distinguish it from the version implemented for the class PriorityQ. 2
  • 3. Transform an Array Into a Heap: Example 6 3 5 7 2 4 10 9 0 1 2 3 4 5 6 7 rebuildHeap 6 • The items in the array, above, can be considered to be stored in the complete binary 3 5 tree shown at right. • Note that leaves 2, 4, 9 & 10 are heaps; nodes 5 & 7 are 7 2 4 10 roots of semiheaps. • rebuildHeap is invoked on 9 the parent of the last node in the array (= 9). 3
  • 4. 4
  • 5. 5
  • 6. 6
  • 7. 7
  • 8. 8
  • 9. 9
  • 10. Transform an Array Into a Heap: Example 6 3 5 9 2 4 10 7 0 1 2 3 4 5 6 7 rebuildHeap • Note that nodes 2, 4, 7, 9 & 6 10 are roots of heaps; nodes 3 & 5 are roots of semiheaps. 3 5 • rebuildHeap is invoked on the node in the array preceding node 9. 9 2 4 10 7 10
  • 11. Transform an Array Into a Heap: Example 6 3 10 9 2 4 5 7 0 1 2 3 4 5 6 7 rebuildHeap • Note that nodes 2, 4, 5, 7, 9 6 & 10 are roots of heaps; node 3 is the root of a 3 10 semiheap. • rebuildHeap is invoked on the node in the array 9 2 4 5 preceding node 10. 7 11
  • 12. Transform an Array Into a Heap: Example 6 3 10 9 2 4 5 7 0 1 2 3 4 5 6 7 rebuildHeap • Note that nodes 2, 4, 5, 7, 9 6 & 10 are roots of heaps; node 3 is the root of a 3 10 semiheap. • rebuildHeap is invoked on the node in the array 9 2 4 5 preceding node 10. 7 12
  • 13. Transform an Array Into a Heap: Example 6 9 10 3 2 4 5 7 0 1 2 3 4 5 6 7 rebuildHeap • Note that nodes 2, 4, 5, 7 & 6 10 are roots of heaps; node 3 is the root of a semiheap. 9 10 • rebuildHeap is invoked recursively on node 3 to complete the transformation 3 2 4 5 of the semiheap rooted at 9 into a heap. 7 13
  • 14. Transform an Array Into a Heap: Example 6 9 10 7 2 4 5 3 0 1 2 3 4 5 6 7 rebuildHeap • Note that nodes 2, 3, 4, 5, 7, 6 9 & 10 are roots of heaps; node 6 is the root of a 9 10 semiheap. • The recursive call to rebuildHeap returns to node 7 2 4 5 9. • rebuildHeap is invoked on the node in the array 3 preceding node 9. 14
  • 15. Transform an Array Into a Heap: Example 10 9 6 7 2 4 5 3 0 1 2 3 4 5 6 7 10 • Note that node 10 is now the root of a heap. • The transformation of the 9 6 array into a heap is complete. 7 2 4 5 3 15
  • 16. Transform an Array Into a Heap (Cont’d.) • Transforming an array into a heap begins by invoking rebuildHeap on the parent of the last node in the array. • Recall that in an array-based representation of a complete binary tree, the parent of any node at array position, i, is  (i – 1) / 2  • Since the last node in the array is at position n – 1, it follows that transforming an array into a heap begins with the node at position  (n – 2) / 2  =  n / 2  – 1 and continues with each preceding node in the array. 16
  • 17. Transform an Array Into a Heap: C++ // transform array a[ ], containing n items, into a heap for( int root = n/2 – 1; root >= 0; root – – ) { // transform a semiheap with the given root into a heap rebuildHeap( a, root, n ); } 17
  • 18. Rebuild a Heap: C++ // transform a semiheap with the given root into a heap void rebuildHeap( ItemType a[ ], int root, int n ) { int child = 2 * root + 1; // set child to root’s left child, if any if( child < n ) // if root’s left child exists . . . { int rightChild = child + 1; if( rightChild < n && a[ rightChild ] > a[ child ] ) child = rightChild; // child indicates the larger item if( a[ root ] < a[ child ] ) { swap( a[ root ], a[ child ] ); rebuildHeap( a, child, n ); } } } 18
  • 19. Transform a Heap Into a Sorted Array • After transforming the array of items into a heap, the next step in Heapsort is to: – invoke the “retrieve & delete” operation repeatedly, to extract the largest item remaining in the heap, until the heap is empty. Store each item retrieved from the heap into the array from back to front. • If we want to perform the preceding step without using additional memory, we need to be careful about how we delete an item from the heap and how we store it back into the array. 19
  • 20. Transform a Heap Into a Sorted Array: Basic Idea Problem: Transform array a[ ] from a heap of n items into a sequence of n items in sorted order. Let last represent the position of the last node in the heap. Initially, the heap is in a[ 0 .. last ], where last = n – 1. 1) Move the largest item in the heap to the beginning of an (initially empty) sorted region of a[ ] by swapping a[0] with a[ last ]. 2) Decrement last. a[0] now represents the root of a semiheap in a[ 0 .. last ], and the sorted region is in a[ last + 1 .. n – 1 ]. 3) Invoke rebuildHeap on the semiheap rooted at a[0] to transform the semiheap into a heap. 4) Repeat steps 1 - 3 until last = -1. When done, the items in array a[ ] will be arranged in sorted order. 20
  • 21. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 10 9 6 7 2 4 5 3 Heap 10 • We start with the heap that we formed from an unsorted array. 9 6 • The heap is in a[0..7] and the sorted region is empty. 7 2 4 5 • We move the largest item in the heap to the beginning of the sorted region by 3 swapping a[0] with a[7]. 21
  • 22. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 3 9 6 7 2 4 5 10 Semiheap Sorted rebuildHeap • a[0..6] now represents a 3 semiheap. • a[7] is the sorted region. 9 6 • Invoke rebuildHeap on the semiheap rooted at a[0]. 7 2 4 5 22
  • 23. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 9 3 6 7 2 4 5 10 Becoming a Heap Sorted rebuildHeap • rebuildHeap is invoked 9 recursively on a[1] to complete the transformation of the semiheap rooted at a[0] 3 6 into a heap. 7 2 4 5 23
  • 24. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 9 7 6 3 2 4 5 10 Heap Sorted • a[0] is now the root of a heap 9 in a[0..6]. • We move the largest item in the heap to the beginning of 7 6 the sorted region by swapping a[0] with a[6]. 3 2 4 5 24
  • 25. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 5 7 6 3 2 4 9 10 Semiheap Sorted rebuildHeap • a[0..5] now represents a 5 semiheap. • a[6..7] is the sorted region. 7 6 • Invoke rebuildHeap on the semiheap rooted at a[0]. 3 2 4 25
  • 26. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 7 5 6 3 2 4 9 10 Heap Sorted rebuildHeap • Since a[1] is the root of a 7 heap, a recursive call to rebuildHeap does nothing. • a[0] is now the root of a heap 5 6 in a[0..5]. • We move the largest item in 3 2 4 the heap to the beginning of the sorted region by swapping a[0] with a[5]. 26
  • 27. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 4 5 6 3 2 7 9 10 Semiheap Sorted rebuildHeap • a[0..4] now represents a 4 semiheap. • a[5..7] is the sorted region. 5 6 • Invoke rebuildHeap on the semiheap rooted at a[0]. 3 2 27
  • 28. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 6 5 4 3 2 7 9 10 Heap Sorted • a[0] is now the root of a heap 6 in a[0..4]. • We move the largest item in the heap to the beginning of 5 4 the sorted region by swapping a[0] with a[4]. 3 2 28
  • 29. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 2 5 4 3 6 7 9 10 Semiheap Sorted rebuildHeap • a[0..3] now represents a 2 semiheap. • a[4..7] is the sorted region. 5 4 • Invoke rebuildHeap on the semiheap rooted at a[0]. 3 29
  • 30. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 5 2 4 3 6 7 9 10 Becoming a Heap Sorted rebuildHeap • rebuildHeap is invoked 5 recursively on a[1] to complete the transformation of the semiheap rooted at a[0] 2 4 into a heap. 3 30
  • 31. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 5 3 4 2 6 7 9 10 Heap Sorted • a[0] is now the root of a heap 5 in a[0..3]. • We move the largest item in the heap to the beginning of 3 4 the sorted region by swapping a[0] with a[3]. 2 31
  • 32. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 2 3 4 5 6 7 9 10 Semiheap Sorted rebuildHeap • a[0..2] now represents a 2 semiheap. • a[3..7] is the sorted region. 3 4 • Invoke rebuildHeap on the semiheap rooted at a[0]. 32
  • 33. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 4 3 2 5 6 7 9 10 Heap Sorted • a[0] is now the root of a heap 4 in a[0..2]. • We move the largest item in the heap to the beginning of 3 2 the sorted region by swapping a[0] with a[2]. 33
  • 34. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 2 3 4 5 6 7 9 10 Semiheap Sorted rebuildHeap • a[0..1] now represents a 2 semiheap. • a[2..7] is the sorted region. 3 • Invoke rebuildHeap on the semiheap rooted at a[0]. 34
  • 35. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 3 2 4 5 6 7 9 10 Heap Sorted • a[0] is now the root of a heap 3 in a[0..1]. • We move the largest item in the heap to the beginning of 2 the sorted region by swapping a[0] with a[1]. 35
  • 36. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 2 3 4 5 6 7 9 10 Heap Sorted • a[1..7] is the sorted region. 2 • Since a[0] is a heap, a recursive call to rebuildHeap does nothing. • We move the only item in the heap to the beginning of the sorted region. 36
  • 37. Transform a Heap Into a Sorted Array: Example 0 1 2 3 4 5 6 7 a[ ]: 2 3 4 5 6 7 9 10 Sorted • Since the sorted region contains all the items in the array, we are done. 37
  • 38. Heapsort: C++ void heapsort( ItemType a[ ], int n ) { // transform array a[ ] into a heap for( int root = n/2 – 1; root >= 0; root – – ) rebuildHeap( a, root, n ); for( int last = n – 1; last > 0; ) { // move the largest item in the heap, a[ 0 .. last ], to the // beginning of the sorted region, a[ last+1 .. n–1 ], and // increase the sorted region swap( a[0], a[ last ] ); last – – ; // transform the semiheap in a[ 0 .. last ] into a heap rebuildHeap( a, 0, last ); } } 38
  • 39. Heapsort: Efficiency • rebuildHeap( ) is invoked  n / 2  times to transform an array of n items into a heap. rebuildHeap( ) is then called n – 1 more times to transform the heap into a sorted array. • From our analysis of the heap-based, Priority Queue, we saw that rebuilding a heap takes O( log n ) time in the best, average, and worst cases. • Therefore, Heapsort requires O( [  n / 2  + (n – 1) ] * log n ) = O( n log n ) time in the best, average and worst cases. • This is the same growth rate, in all cases, as Mergesort, and the same best and average cases as Quicksort. • Knuth’s analysis shows that, in the average case, Heapsort requires about twice as much time as Quicksort, and 1.5 times as much time as Mergesort (without requiring additional storage). 39
  • 40. Growth Rates for Selected Sorting Algorithms Best case Average case (†) Worst case Selection sort n2 n2 n2 Bubble sort n n2 n2 Insertion sort n n2 n2 Mergesort n * log2 n n * log2 n n * log2 n Heapsort n * log2 n n * log2 n n * log2 n Treesort n * log2 n n * log2 n n2 Quicksort n * log2 n n * log2 n n2 Radix sort n n n † According to Knuth, the average growth rate of Insertion sort is about 0.9 times that of Selection sort and about 0.4 times that of Bubble Sort. Also, the average growth rate of Quicksort is about 0.74 times that of Mergesort and about 0.5 times that of Heapsort. 40