#include <stdio.h> #include <stdlib.h> int left(int i)//返回左孩子位置 { return 2*i; } int right(int i)//返回右孩子位置 { return 2*i+1; } void min_heapify(int *a,int heap_size,int i)//保持堆性质,使以i为根的子树成为最小堆 ,heap_size当前堆中元素数量 { int l,r,least; int temp; l=left(i); r=right(i); if(l<=heap_size&&a[l]<a[i]) least=l; else least=i; if(r<=heap_size&&a[r]<a[least]) least=r; if(least!=i) { temp=a[i]; a[i]=a[least]; a[least]=temp; min_heapify(a,heap_size,least); } } void build_min_heap(int *a,int length)//建立最小堆 { int i,heap_size; for(i=length/2;i>=1;i--) min_heapify(a,length,i); } void heap_sort2(int *a,int length)//堆排序,从大到小 ,length为堆
算法入门--堆排序2(建立最小堆,从大到小)
最新推荐文章于 2024-07-19 14:53:32 发布
本文介绍了如何使用C语言实现堆排序,重点在于建立最小堆并进行从大到小的排序过程。通过示例代码展示了如何读取用户输入,构建最小堆,并最终完成堆排序。
摘要由CSDN通过智能技术生成