Saturday, July 6, 2024

Python Program for Heap Sort

Pre-requisite: What is Heap Sort?

Heapsort is a comparison-based sorting technique based on a Binary Heap data structure. It is similar to selection sort where we first find the maximum element and place the maximum element at the end. We repeat the same process for the remaining element.

Python Program for Heap Sort

The given Python code implements the Heap Sort algorithm, which is an efficient comparison-based sorting method. Heap Sort works by building a binary heap and repeatedly extracting the maximum element (in the case of a max heap) from the heap, which is then placed at the end of the sorted portion of the array. The code comprises three main functions: heapify, heapSort, and the driver code.

The heapify function is responsible for maintaining the heap property of the binary tree. Given an array, the function adjusts the element at index i such that the subtree rooted at index i satisfies the heap property, i.e., the parent is greater than its child nodes.

The heapSort function orchestrates the sorting process. It first converts the input array into a max heap by using the heapify function iteratively. Once the max heap is constructed, the function swaps the root (largest element) with the last element and re-heapifies the reduced heap. This process is repeated until the entire array is sorted.

The driver code initializes an array, applies the heapSort function to sort it, and then prints the sorted array. The array [12, 11, 13, 5, 6, 7] is used as an example. After sorting, the output displays the elements in ascending order.

In summary, the code demonstrates the implementation of Heap Sort, which efficiently sorts an array by creating a max heap and repeatedly extracting the maximum element from it. Heap Sort’s time complexity is O(n log n), making it suitable for large datasets.

Python




#!/usr/bin/python
# -*- coding: utf-8 -*-
# Python program for implementation of heap Sort
 
# To heapify subtree rooted at index i.
# n is size of heap
 
 
def heapify(arr, n, i):
    largest = # Initialize largest as root
    l = 2 * i + 1  # left = 2*i + 1
    r = 2 * i + 2  # right = 2*i + 2
 
 # See if left child of root exists and is
 # greater than root
 
    if l < n and arr[i] < arr[l]:
        largest = l
 
 # See if right child of root exists and is
 # greater than root
 
    if r < n and arr[largest] < arr[r]:
        largest = r
 
 # Change root, if needed
 
    if largest != i:
        (arr[i], arr[largest]) = (arr[largest], arr[i])  # swap
 
  # Heapify the root.
 
        heapify(arr, n, largest)
 
 
# The main function to sort an array of given size
 
def heapSort(arr):
    n = len(arr)
 
 # Build a maxheap.
 # Since last parent will be at ((n//2)-1) we can start at that location.
 
    for i in range(n // 2 - 1, -1, -1):
        heapify(arr, n, i)
 
 # One by one extract elements
 
    for i in range(n - 1, 0, -1):
        (arr[i], arr[0]) = (arr[0], arr[i])  # swap
        heapify(arr, i, 0)
 
 
# Driver code to test above
 
arr = [12, 11, 13, 5, 6, 7, ]
heapSort(arr)
n = len(arr)
print('Sorted array is')
for i in range(n):
    print(arr[i])
 
# This code is contributed by Mohit Kumra


Output

Sorted array is
5
6
7
11
12
13

Time Complexity: O(n*log(n))

  • The time complexity of heapify is O(log(n)).
  • Time complexity of createAndBuildHeap() is O(n).
  • And, hence the overall time complexity of Heap Sort is O(n*log(n)).

Auxiliary Space: O(log(n))

Heap Sort using Python STL

Steps:

  1. Import the Python STL library “heapq“.
  2. Convert the input list into a heap using the “heapify” function from heapq.
  3. Create an empty list “result” to store the sorted elements.
  4. Iterate over the heap and extract the minimum element using “heappop” function from heapq and append it to the “result” list.
  5. Return the “result” list as the sorted output.

Python3




import heapq
 
# Function to perform the sorting using
# heaop sort
def heap_sort(arr):
    heapq.heapify(arr)
    result = []
    while arr:
        result.append(heapq.heappop(arr))
    return result
   
# Driver Code
arr = [60, 20, 40, 70, 30, 10]
print("Input Array: ", arr)
print("Sorted Array: ", heap_sort(arr))


Output

Input Array:  [60, 20, 40, 70, 30, 10]
Sorted Array:  [10, 20, 30, 40, 60, 70]

Time Complexity: O(n log n), where “n” is the size of the input list. 

Auxiliary Space: O(1).

Please refer complete article on Heap Sort for more details!

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

Shaida Kate Naidoo
am passionate about learning the latest technologies available to developers in either a Front End or Back End capacity. I enjoy creating applications that are well designed and responsive, in addition to being user friendly. I thrive in fast paced environments. With a diverse educational and work experience background, I excel at collaborating with teams both local and international. A versatile developer with interests in Software Development and Software Engineering. I consider myself to be adaptable and a self motivated learner. I am interested in new programming technologies, and continuous self improvement.
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments