有一组数据(15,9,7,8,20,-1,7,4),用堆排序的筛选方法建立的初始堆为 ( )

答案是什么?求详细解答筛选方法是什么?好纠结呜呜选项a.-1,4,8,9,20,7,15,7b.-1,7,15,7,4,8,20,9c.-1,4,7,8,20,15,7,... 答案是什么?求详细解答 筛选方法是什么? 好纠结 呜呜
选项
a.-1,4,8,9,20,7,15,7 b.-1,7,15,7,4,8,20,9
c.-1,4,7,8,20,15,7,9 d.a,b,c均不对。
展开
 我来答
chiconysun
2013-02-25 · TA获得超过2.2万个赞
知道大有可为答主
回答量:5410
采纳率:92%
帮助的人:2610万
展开全部
如果你的问题是递减排序,就需要首先建立一个小根堆
因为其中有重复的关键字,因此当左右孩子相等并且需要和双亲调整时,原则上无论左右哪一个都可以,所以实际上这个问题会出现两个答案:
-1, 4, 7, 8, 20, 15, 7, 9 和-1, 4, 7, 8, 20, 7, 15, 9
一般算法都是和左子树的调整,这时就是前面的答案了

如果你的问题是递增排序,就需要先建立一个大根堆,不过这时只有唯一的答案:
20, 15, 7, 8, 9, -1, 7, 4
Soucula
推荐于2018-03-13 · TA获得超过3091个赞
知道小有建树答主
回答量:744
采纳率:93%
帮助的人:75万
展开全部
初始序列建立的堆为:
15
9 7
8 20 -1 7
4
由于选项的第一个元素是-1所以我们尝试建小顶堆,因为大顶堆显然不符合任何选项。
第一步:
15
4 -1
8 20 7 7
9
第二步:
-1
4 7
8 20 15 7
9
因此得到的序列为 -1,4,7,8,20,15,7,9
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
真梅嘉斯
2013-02-25 · TA获得超过145个赞
知道小有建树答主
回答量:100
采纳率:0%
帮助的人:90.8万
展开全部
#include <stdio.h>

typedef struct rectype{

int key;

}rectype;

void HEAPSORT(rectype R[],int n);
void SIFT(rectype R[],int i,int m);

void HEAPSORT(rectype R[],int n){

int i;
int j;
rectype temp;

for(i=n/2;i>=1;i--)
SIFT(R,i,n);

for(j=1;j<=n;j++){
printf("%d ",R[j].key);
}

for(i=n;i>=1;i--){

temp = R[1];
R[1] = R[i];
R[i] = temp;

SIFT(R,1,i-1);
}

}

void SIFT(rectype R[],int i,int m){

int j;
rectype temp = R[i];//NOTE

j = i*2;

while(j<=m){

if((j<m)&&(R[j].key > R[j+1].key)) j++;

if(temp.key > R[j].key){

i = j;

j = 2*i;

}
else break;
}
R[i] = temp;

}

int main()
{

int i;
rectype R[9]={0,15,9,7,8,20,-1,7,4};
int n=8;
HEAPSORT(R,n);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式