您的位置:首页 > 其它

[算法]堆排序

2015-12-23 21:19 260 查看
/*
Name:堆排序

Actor:HT

Time:2015年12月23日

Error Reporte:	1.每次调整的时候,注意size变量!

*/
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <vector>
#include <algorithm>

#define N 200

int a
;
int sum = 10;

void heapadjust(int adjust,int size)		//堆排调整
{
int largest = adjust;
int temp;
if (2 * adjust <= size && a[largest] < a[2 * adjust])	//左看
{
largest = 2 * adjust;
}
if (2 * adjust + 1 <= size && a[largest] < a[2 * adjust + 1])	//右看
{
largest = 2 * adjust + 1;
}
if (largest != adjust)		//调整
{
temp = a[adjust];
a[adjust] = a[largest];
a[largest] = temp;
if(largest*2 <= size) heapadjust(largest,size);
}

for(int i=1;i<=size;i++)
{
printf(":%d ",a[i]);
}
printf("\n");
}

void heapsort()		//堆排序
{
int i, j;
int temp;
for (i = sum / 2; i > 0; i--)	//从下向上建堆
{
heapadjust(i,sum);
}

for(i=1;i<=sum;i++)
{
printf("lll:%d ",a[i]);
}
printf("\n");

for (i = sum; i > 1; i--)		//依次放到最后的位置
{
temp = a[i];
a[i] = a[1];
a[1] = temp;
heapadjust(1,i-1);		//调整该点
}
}

int main()
{
int i,j;
for(i=1;i<=sum;i++)
{
scanf("%d",&a[i]);
}
heapsort();
for(i=1;i<=sum;i++)
{
printf("%d ",a[i]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: