您的位置:首页 > 其它

堆排序(大)

2011-10-25 20:15 134 查看
#include<iostream>
#include<stdio.h>
using namespace std;
#define MAX_ELEMENTS 200
#define HEAP_FULL(n) (n==MAX_ELEMENTS-1)
#define HEAP_EMPTY(n) (!n)
typedef struct
{
int key;
}element;

element heap[MAX_ELEMENTS];
int n=0;

void push(element item,int *n)
{
int i;
if(HEAP_FULL(*n))
{
printf("溢出");
return ;
}
i=++(*n);//这样做是保证啦双向的值传递。
while(i!=1&&item.key>heap[i/2].key)
{
heap[i]=heap[i/2];
i/=2;
}
heap[i]=item;
}

void out(int n)
{
int i=0;
for(i=1;i<=n;i++)
{
cout<<heap[i].key<<"\t";
}
}

int main()
{
element item;

item.key=20;
push(item,&n);

item.key=15;
push(item,&n);

item.key=2;
push(item,&n);

item.key=14;
push(item,&n);

item.key=10;
push(item,&n);

out(n);
return 0;
}

/*
1 当时一直错,知道后来想起来这个程序才知道哪里错啦。

#include<iostream>
#include<stdio.h>
using namespace std;
void swap(int *a,int*b)
{
int l=*a;
*a=*b;
*b=l;
}

int main()
{
int a=10;
int b=15;
cout<<a<<"\t"<<b<<endl;
swap(&a,&b);//注意这个取地址符号
cout<<a<<"\t"<<b<<endl;
return 0;
}

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: