荷泽泽 2021-04-04 16:28 采纳率: 66.7%
浏览 10

对一个由大到小的有序数组进行大根堆排序,为什么会无效呢

我照着数据结构书上打的代码,运行完却不是正确结果,求大佬看看

#include <stdio.h>


//一次排序
void HeadAdjust(int A[], int len, int k) {
	A[0] = A[k];
	int dongzhi = 2 * k;
	for (; dongzhi <= len; dongzhi *= 2) {
		if (dongzhi < len && A[dongzhi] < A[dongzhi + 1]) {
			dongzhi++;
		}
		if (A[0] >= A[dongzhi]) {
			break;
		}
		else {
			A[k] = A[dongzhi];
			k=dongzhi;
		}
	}
	A[k]=A[0];
}

//初始建立大根堆
void BuildMaxHeap(int A[], int len) {
	for (int i = (len / 2); i > 0; i--) {
		HeadAdjust(A, len, i);
	}
}
//交换算法
void swap(int A[], int j) {
	int temp = A[j];
	A[j] = A[1];
	A[1] = temp;

}


int main(void) {
	
	int A[9] = { 0,9,17,32,45,53,65,78,87 };

	BuildMaxHeap(A, 8);
	for (int j = 8; j > 1; j--) {
		swap(A,j);
		HeadAdjust(A, 1, j - 1);
	}
	for (int i = 1; i < 9; i++) {			//测试
		printf("A[%d]=%d\n", i, A[i]);
	}

	return 0;
}
  • 写回答

1条回答 默认 最新

  • lenotle 2021-04-04 18:06
    关注

    建立大根堆过程就错了 , for循环没进行任何操作

    评论

报告相同问题?

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表