关注
我也觉得有问题, 不过我的答案跟楼主也不同。。。附上我的答案:
好像牛客网目前有点小问题, 图片传不上来
我用数组的方式表示: 从A.length/2 = 8/2 = 4 也就是 数字1开始调整
45301726 -> 45301726 -> 45361720 -> 45761320 ->
46751320 -> 76451320
附上代码:
public int[] heapSort(int[] A, int n) {
for(int i=(n-1)/2;i>=0;--i){ //将数组初始化为堆
heapAdSort(A,i,n);
}
print(A);
//只要初始化部分,后面代码注释掉
/* for(int i=n-1;i>0;--i){
int temp = A[i];
A[i] = A[0];
A[0] = temp;
heapAdSort(A,0,i);
}
*/
return A;
}
public void heapAdSort(int[] A,int i,int
n){//A为数组,i为结点值,n为数组长度
int child = 2 * i + 1; //左孩子
int temp = A[i];//保存节点值
while(child < n){
if(child+1 < n && A[child] <
A[child+1]){// 把child节点指向左右孩子中较大的一个
child ++ ;
}
if(A[i] < A[child]){//如果节点小于孩子值,则交换,节点向下
A[i]=A[child];
i = child;
child = 2*i+1;
}else{
break;
}
A[i] = temp;//将节点保存;
}
}
public void print(int[] A){
for(int i:A){
System.out.print(i+" ");
}
System.out.println();
}
查看原帖
点赞 3
相关推荐
牛客热帖
更多
正在热议
更多
# 百度工作体验 #
224593次浏览 1983人参与
# 机械人与华为的爱恨情仇 #
117393次浏览 947人参与
# 现代汽车前瞻技术研发急速编程挑战赛 #
28708次浏览 222人参与
# 你觉得实习能学到东西吗 #
37610次浏览 734人参与
# 发工资后,你做的第一件事是什么 #
68334次浏览 229人参与
# 金融财会交流会 #
110176次浏览 380人参与
# 秋招什么时候开投比较合适? #
25460次浏览 328人参与
# 如何准备秋招 #
21412次浏览 401人参与
# 工作中哪个瞬间让你想离职 #
26057次浏览 177人参与
# 正在实习的你,几点下班 #
169682次浏览 1170人参与
# 产品每日一题 #
46955次浏览 575人参与
# 机械人集合!你是什么工程师? #
15994次浏览 89人参与
# 你们公司几号发工资 #
21569次浏览 143人参与
# CVTE求职进展汇总 #
15995次浏览 292人参与
# 硬件应届生薪资是否普遍偏低? #
74239次浏览 514人参与
# 工作中,努力重要还是选择重要? #
135023次浏览 1660人参与
# 机械人的offer怎么选 #
147078次浏览 801人参与
# 每个月的工资都是怎么分配的? #
31527次浏览 455人参与
# 实习,不懂就问 #
47341次浏览 705人参与
# 我想去国央企的原因 #
60208次浏览 393人参与
# 不考虑转正,实习多久合适 #
32534次浏览 147人参与