|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 panzer111 于 2017-9-14 00:49 编辑
// 159.cpp : 定义控制台应用程序的入口点。
//
#include "StdAfx.h"
#include <stdio.h>
void swap(int k[],int i,int j)
{
int temp;
temp=k[i];
k[i]=k[j];
k[j]=temp;
}
void HeapAdjust(int k[],int s, int n)
{
int i;
int temp=k[s];
for(i=2*s;i<=n;i*=2)
{
if (i<n && k[i]<k[i+1])
{
i++;
}
if (temp >=k[i])
{
break;
}
k[s]=k[i];
s=i;
}
temp=k[s];
}
void HeapSort(int k[],int n)
{
int i;
for(i=n/2;i>0;i--)
HeapAdjust(k,i,n);
for(i=n;i>1;i--)
{ swap(k,1,i);
HeapAdjust(k,1,i-1);
}
}
int main()
{
int i,a[10]={1,5,7,3,54,49,21,78,47,16};
HeapSort(a,9);
for(i=1;i<10;i++)
{
printf("%d",a[i]);
}
return 0;
}
------------------
void HeapSort(int k[],int n)
{
int i;
for(i=n/2;i>0;i--)
HeapAdjust(k,i,n);
for(i=n;i>1;i--)
{ swap(k,1,i);
HeapAdjust(k,i,i-1);
}
}
------------------
第一个for循环结束后,i已经到了0,首先从n/2开始构建堆,然后从n/2-1开始,自减直到1,也即是第一个起始数,那么第一个for循环结束后是否意味着对整个数组而言,HeapAdjust的整体大顶堆已经构建完毕?
既然整体大顶堆构建完毕,是指所有元素达到有序排列,还是仅仅把最大元素送上堆顶? |
|