Document 1
Document 1
6
Program Name:
Write a program in C for Heap Sort.
Theory Concept:
Heap Sort is a comparison-based sorting algorithm that uses a binary heap data
structure to create a sorted array. It is an efficient sorting technique and falls
under the category of in-place sorting algorithms, as it requires only a constant
amount of additional memory. Heap sort has a time complexity of O(n log n)
for all cases (best, average, and worst).
Implementation:
#include<stdio.h>
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void heapify(int arr[], int n, int i)
{
int largest = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
if (left < n && arr[left] > arr[largest])
{
largest = left;
}
if (right < n && arr[right] > arr[largest]) {
largest = right;
}
if (largest != i)
{
swap(&arr[i], &arr[largest]);
heapify(arr , n , largest);
}
}
void heapSort(int arr[], int n)
{
for (int i = n / 2 - 1; i >= 0; i--)
{
heapify(arr,n, i);
}
for (int i = n - 1; i > 0; i--)
{
swap(&arr[0], &arr[i]);
heapify(arr, i, 0);
}
}
void printArray(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = {12, 11, 13, 5, 6, 7};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Original array: \n");
printArray(arr, n);
heapSort(arr, n);
printf("Sorted array: \n");
printArray(arr, n);
return 0;
}
Output/Conclusion:
Original array:
12 11 13 5 6 7
Sorted array:
5 6 7 11 12 13