PTA 7-1堆排序

Posted 猛男Banana君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PTA 7-1堆排序相关的知识,希望对你有一定的参考价值。

对n个数,要求用堆排序(最大堆)对其进行排序。

在这里插入图片描述

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;

int n,N=1000;
int a[10000];

void HeapAdjust(int a[],int s,int m)         //筛选法调整堆 
{
 	int x=a[s];
 	for(int j=2*s;j<=m;j*=2)
 	{
  		if(j<m && a[j]<a[j+1]) j++;
  		if(x>=a[j])  break;
  		a[s]=a[j];
  		s=j;
 	}
 	a[s]=x;
}

void CreateHeap(int a[])      //建初堆 
{
 	for(int i=n/2;i>0;i--)
 	{
  		HeapAdjust(a,i,n);
 	}
} 

void HeapSort(int a[])          //堆排序实现 
{
 	CreateHeap(a);
 	
 	for(int i=1;i<=n;i++)
  		cout<<a[i]<<" ";
 	cout<<endl;
 	
 	for(int i=n;i>1;i--)
 	{
  		swap(a[1],a[i]);      //交换堆顶记录和子序列最后一个记录   
  		HeapAdjust(a,1,i-1);
  		
  		for(int i=1;i<=n;i++)
   			cout<<a[i]<<" ";
  		cout<<endl;
 	}
}

int main()
{
 	cin>>n;
 	
 	for(int i=1;i<=n;i++)
  		cin>>a[i];
  		
 	HeapSort(a);
 	return 0;
}

以上是关于PTA 7-1堆排序的主要内容,如果未能解决你的问题,请参考以下文章

[PTA]实验7-1-5 选择法排序

Java排序算法 - 堆排序的代码

[PTA]实验7-1-1 简化的插入排序

算法排序之堆排序

PTA乙级 (1049 数列的片段和 (20分))

PTA L1难度困难 7-1 到7-83