반응형
다음 코드는 C언어로 구현한 힙정렬 소스입니다.
#include <stdio.h>
// Function to swap two elements
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
// Heapify the subtree rooted at index 'root'
void heapify(int arr[], int size, int root)
{
int largest = root; // Initialize largest as root
int left = 2 * root + 1; // Left child
int right = 2 * root + 2; // Right child
// If left child is larger than root
if (left < size && arr[left] > arr[largest])
largest = left;
// If right child is larger than current largest
if (right < size && arr[right] > arr[largest])
largest = right;
// If largest is not root
if (largest != root) {
swap(&arr[root], &arr[largest]);
// Recursively heapify the affected sub-tree
heapify(arr, size, largest);
}
}
// Main function to perform Heap Sort
void heapSort(int arr[], int size)
{
// Build heap (rearrange array)
for (int i = size / 2 - 1; i >= 0; i--)
heapify(arr, size, i);
// Extract elements from the heap one by one
for (int i = size - 1; i >= 0; i--) {
// Move current root to end
swap(&arr[0], &arr[i]);
// Call heapify on the reduced heap
heapify(arr, i, 0);
}
}
// Function to print an array
void printArray(int arr[], int size)
{
for (int i = 0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
// Test the heap sort algorithm
int main()
{
int arr[] = { 12, 11, 13, 5, 6, 7 };
int size = sizeof(arr) / sizeof(arr[0]);
printf("Original array: ");
printArray(arr, size);
heapSort(arr, size);
printf("Sorted array: ");
printArray(arr, size);
return 0;
}
반응형
'C_C++' 카테고리의 다른 글
(C언어) 배열에서 두 번째 큰 값 구하기 (0) | 2023.05.22 |
---|---|
(C언어) 스택에 삽입 삭제하는 프로그램 소스 (0) | 2023.05.17 |
(C언어) 이진 파일(binary file) 복사하기 (0) | 2023.05.17 |
(C언어) 함수 포인터 예제 (0) | 2023.05.14 |
(C언어) BMI 체질량지수 계산하기 (0) | 2023.05.03 |