网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

堆排序-从小到大-创新互联

利用数组模拟一棵完全二叉树,根据数组下标可以快速确定一个结点的左右孩子和父母。
例如根结点下标为5,下标10为其左孩子,11为右孩子,2为双亲。
非常适合处理的问题:在只能存储一定数据时,而总元素个数较大,只需取前k个小的数
时间复杂度O(nlogn)

在高淳等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站制作、网站建设 网站设计制作定制网站开发,公司网站建设,企业网站建设,成都品牌网站建设,成都全网营销推广,外贸网站建设,高淳网站建设费用合理。
#include#include#include#include
#include#includeusing namespace std;

#define N 100005
#define pi 3.14159
typedef long long ll;

int a[N];//存储数据

void adjustHeap(int i, int len)//调整堆//down
{a[0] = a[i];//a[0]保存根的值
	for (int j = 2 * i; j<= len; j*=2)//找更大的孩子
	{if (j< len && a[j]< a[j + 1]) j++;//a[j]为左孩子,a[j+1]为右孩子
		if (a[0] >= a[j]) break;//根已经比孩子大,符合大顶堆
		else
		{	a[i] = a[j];//将大的孩子的值给根
			i = j;//选定的孩子作为新根
		}
	}
	a[i] = a[0];//归还
}

void creatHeap(int len)//建堆
{for (int i = len / 2; i >0; i--)
	{adjustHeap(i, len);
	}
}

void heapSort(int len)
{creatHeap(len);
	for (int i = len; i >1; i--)
	{swap(a[1], a[i]);//将堆顶的大元素放到最后面
		adjustHeap(1, i - 1);
	}
}

int main()
{int n;
	scanf("%d", &n);
	for (int i = 1; i<= n; i++)
	{scanf("%d", &a[i]);
	}
	heapSort(n);
	for (int i = 1; i<= n; i++)
	{printf("%d ", a[i]);
	}



	return 0;
}

实现从小到大排序则建立大顶堆,实现从大到小建立小顶堆

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章题目:堆排序-从小到大-创新互联
网址分享:http://bjjierui.cn/article/jdgdd.html

其他资讯