堆排序算法的实现!!
发布时间:2020-12-13 20:24:33 所属栏目:PHP教程 来源:网络整理
导读:上机代码: #include cstdio#include cstring#include algorithmusing namespace std;#define parent(i) (i)/2#define left(i) 2*(i)#define right(i) 2*(i)+1int size;void heapify(int a[],int i){int l = left(i),r = right(i),largest;if(l=size a[l] a[
上机代码: #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define parent(i) (i)/2
#define left(i) 2*(i)
#define right(i) 2*(i)+1
int size;
void heapify(int a[],int i)
{
int l = left(i),r = right(i),largest;
if(l<=size && a[l] > a[i])
largest = l;
else largest = i;
if(r<=size && a[r] > a[largest])
largest = r;
if(largest != i)
{
int t = a[i];
a[i] = a[largest];
a[largest] = t;
heapify(a,largest);
}
}
void build_heap(int a[])
{
int len = size;
for(int i=len/2; i>=1; i--)
heapify(a,i);
}
void heap_sort(int a[])
{
build_heap(a);
for(int i=size; i>=2; i--)
{
int t = a[1]; a[1] = a[i]; a[i] = t;
size--;
heapify(a,1);
}
}
int main()
{
int a[20];
printf("请输入数据个数:
");
scanf("%d",&size);
int len = size;
printf("请输入%d个你要排序的数:
",size);
for(int i=1; i<=size; i++)
scanf("%d",&a[i]);
heap_sort(a);
for(int i=1; i<len; i++)
printf("%d ",a[i]);
printf("%d
",a[len]);
return 0;
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |