c语言堆排序
作者:野牛程序员:2024-01-03 21:31:20C语言阅读 2623
堆排序是一种基于二叉堆数据结构的排序算法。以下是用C语言实现的堆排序示例代码:
#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 size) { for (int i = 0; i < size; 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("原始数组: \\n"); printArray(arr, n); heapSort(arr, n); printf("排序后的数组: \\n"); printArray(arr, n); return 0; }
这段代码实现了堆排序算法,包括堆的构建和排序过程。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
