原创
堆排序:
使用visit数组从本质出发获取大顶堆排序。
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int visit[100]={0};
void adjust_sort(int a[],int n)
{
int i;
for(i=n/2-1;i>=0;i--)
{
int left=2*i+1;
if(!visit[left]&&!visit[left+1])
{
if(a[i]<a[left]&&a[left]>a[left+1])
swap(a[i],a[left]);
if(a[i]<a[left+1]&&a[left]<a[left+1])
swap(a[i],a[left+1]);
}
if(!visit[left]&&visit[left+1])
{
if(a[i]<a[left])
swap(a[i],a[left]);
}
}
}
void head_sort(int a[],int n)
{
for(int i=n-1;i>=0;i--)
{
adjust_sort(a,n);
swap(a[0],a[i]);
visit[i]=1;
}
}
int main()
{
int a[100];
int i=0;
while(scanf("%d",&a[i])!=EOF)
{
i++;
}
int n=i;
head_sort(a,n);
for(i=n-1;i>=0;i--)
printf("%d ",a[i]);
}
网友评论