C语言 最大堆排序
2015-05-21 21:17
148 查看
#include<iostream> using namespace std; int left(int i){ return 2*i; } int right(int i){ return 2*i+1; } int parent(int i){ return i/2; } void maxHeapify(int *arr, int length, int i){ if(arr == 0 || i < 0){ return ; } int l = left(i); int r = right(i); int largest = i; if(l <= length && arr[l-1] > arr[largest-1]){ largest = l; } if(r <= length && arr[r-1] > arr[largest-1]){ largest = r; } if(largest != i){ int temp = arr[i-1]; arr[i-1] = arr[largest-1]; arr[largest-1] = temp; maxHeapify(arr, length, largest); } } void buildMaxHeap(int *arr, int length){ if(arr == 0 || length <= 0){ return; } for(int i=length/2; i>=1; i--){ maxHeapify(arr, length, i); } } void maxHeapSort(int *arr, int length){ if(arr == 0 || length <= 0){ return; } int temp; <pre name="code" class="cpp"> buildMaxHeap(arr, i-1);for(int i=length; i>1; i--){temp = arr[i-1];arr[i-1] = arr[0];arr[0] = temp;
$length -= 1;
maxHeapify($arr, 1, $length); } } int main(){ int arr[7] = {2, 3, 5, 1, 8, 6, 4}; maxHeapSort(arr, 7); for(int i=0; i<7; i++){ printf("%d\n", arr[i]); } return 0; }
相关文章推荐
- leetcode 628. Maximum Product of Three Numbers(C语言,堆排序,计算最大乘积)33
- 常见算法:C语言求最小公倍数和最大公约数的算法
- C语言实现堆排序
- 《C语言及程序设计初步》_1.7分支结构程序体验_实践7——三数最大值
- C语言实现: 求两个数的最大公约数
- 排序算法之堆排序详解(附最大堆示例代码)
- 常见排序算法的C语言实现之堆排序
- C语言:求三个数的最大值
- 堆排序(最大堆)
- 找出N个数据中的最大的K个数据---堆排序
- 10月5日 c语言 3*4矩阵 求出其中值中最大的那个元素的值,以及其所在的行号和列号
- 【C语言】打印1到最大的n位数
- C语言 求最大公约数的三种方法,利用最大公约数求最小公倍数,通过分解质因数法来验证
- 《C语言及程序设计》实践参考——求最大公约数
- 51Nod1011 最大公约数GCD(C语言)
- C语言实例12——输入两个正整数m和n,求其最大公约数和最小公倍数。
- c语言找到数组中最大的成员和下标
- 用C语言编写:求10 个整数中最大值
- 用堆排序寻找数组中最大的K个数
- C语言的整型溢出问题 int、long、long long取值范围 最大最小值