Problem Description
实验要求:用堆排序算法按关键字递减的顺序排序。
程序输入:待排序记录数(整数)和待排序记录(整数序列);
程序输出:建堆结果和建堆后第一、第二次筛选结果。(注:待排序记录数大于等于3)
测试输入
6
11
12
16
14
15
10
测试输出
16 15 11 14 12 10
15 14 11 10 12
14 12 11 10
AcCode
//
// main.cpp
// 堆排序
//
// Created by jetviper on 2017/3/26.
// Copyright © 2017年 jetviper. All rights reserved.
//
#include <stdio.h>
int arr[10000]={0};
int n;
void sorting(int len,int t)
{
int i=2*len;
int tmp=arr[len];
while(1)
{
if(i>t)break;
if(i<t && arr[i]<arr[i+1])i++;
if(tmp>=arr[i])i=t+1;
else {
arr[len]=arr[i];
len=i;
i*=2;
}
}
arr[len]=tmp;
return;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&arr[i]);
for(int i=0;i<3;i++){
for(int len=n/2;len>=1;len--)sorting(len,n);
for(int i=1;i<=n;i++)printf("%d ",arr[i]);
printf("\n");
arr[1]=arr[n];
n--;
}
return 0;
}