sos这个数据结构c语言的堆排序代码为什么运行不出来




```问题描述
对于任一无序正整数序列,写一程序用堆排序算法将其排序成按值非递减有序序列。
输入描述
文本文件“input.txt”中保存了n个测试用例,文件以-1结束。每个用例的第一行m表示待排序正整数序列的元素个数,第二行为该序列的m个正整数。
输出描述
输出结果保存在文本文件“output.txt”中。对于每个测试用例均有二行输出,第一行输出“Case #:##”,#表示用例的编号(1…n),##表示排序后有序序列的元素个数,第二输出##个按值非递减有序元素。
代码如下:

```c
#include<stdio.h>
#include <stdlib.h>
#define MinData 0;
typedef int ElementType;
typedef struct HeapStruct* MinHeap;
struct HeapStruct{
    ElementType *Elements;
    int Size;
    int Capacity;
};

MinHeap Create(int MaxSize)
{
    MinHeap H = (MinHeap)malloc(sizeof(struct HeapStruct));
    H->Elements=(int*)malloc(sizeof(int)*(MaxSize+1));
    H->Size = 0;
    H->Capacity = MaxSize;
    H->Elements[0]=MinData;
    return H;
}
//插入元素 
void Insert(MinHeap H,ElementType item)
{
    int i;
    if(H->Size == H->Capacity){
        return;
    }
    i=++H->Size;
    for(;H->Elements[i/2]<item;i/=2){
        H->Elements[i]=H->Elements[i/2];
    }
    H->Elements[i]=item;
}
//取出最小值,并删除节点 
ElementType DeleteMin(MinHeap H)
{
    int Parent,Child;
    ElementType Minitem,temp;
    Minitem=H->Elements[1];//取出根节点的最小值 
    temp=H->Elements[H->Size--];//用最小堆中最后一个元素从根节点开始向上过滤下层节点 
    for(Parent=1;Parent*2<H->Size;Parent=Child){
        Child=Parent*2;
        if((Child!=H->Size) && (H->Elements[Child]>H->Elements[Child+1])) {
          Child++;
        if(temp < H->Elements[Child]) break;
        else{
            H->Elements[Parent]=H->Elements[Child];
        }
        
     }
    }
    H->Elements[Parent]=temp;
    return Minitem;
}

int main()
{
    FILE *fp=fopen("D://input.txt","r");
    FILE *fo=fopen("D://output.txt","w");
    MinHeap H;
    int MaxSize=0;
    int dat=0;
    int i=0;
        
    while(1){
        fscanf(fp,"%d",&MaxSize);
        if(MaxSize==-1) break;
        H=Create(MaxSize);
        for(int j=0;j<MaxSize;j++){
            fscanf(fp,"%d",&dat);
            Insert(H,dat);
        }
        fprintf(fp,"Case %d : %d\n",i+1,MaxSize);
        for(int k=0;k<MaxSize;k++){
            fprintf(fo,"%d  ",DeleteMin(H));
        }
        i++;
        fprintf(fo,"\n");
        free(H); 
    }
}

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。