#include<stdio.h> #define FALSE 0 #define TRUE 1 typedef int KeyType,OtherType; typedef struct{ KeyType key; OtherType other_data; }RecordType; void print(RecordType r[],int len){ for(int i=1;i<=len;i++){ printf("%d ",r[i].key); }printf("\n"); } void sift(RecordType r[],int k,int m); void crt_heap(RecordType r[],int n){ for(int i=n/2;i>=1;i--) sift(r,i,n); } void sift(RecordType r[],int k,int m){ RecordType t=r[k]; int x=r[k].key; int i=k; int j=2*i; int finished=FALSE; while(j<=m&&!finished){ if(j+1<=m&&r[j].key<r[j+1].key) j++; if(x>=r[j].key) finished=TRUE; else{ r[i]=r[j]; i=j; j=2*i; } }r[i]=t; } void HeapSort(RecordType r[],int n){ crt_heap(r,n); RecordType b; for(int i=n;i>=2;i--){ b=r[1]; r[1]=r[i]; r[i]=b; sift(r,1,i-1); print(r,n); } } int main(){ RecordType r[100]; int m,i=1; while(1){ scanf("%d",&m); if(r[i].key==0)break; r[i].key=m; i++; }int n=i-1; HeapSort(r,n); return 0; }为什么没有输出
时间: 2023-12-09 07:04:00 浏览: 40
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码没有输出是因为在输入数据时,没有给定结束输入的条件。在 `main` 函数中,通过 `while(1)` 循环读入数据,但是没有在循环体中设置结束条件,导致程序一直在等待输入,无法进行下一步操作。
你可以在输入数据时,增加一个结束输入的标志,例如输入 `-1` 作为结束标志。同时,在 `while` 循环中添加一个判断,当读入数据为 `-1` 时,跳出循环。修改后的代码如下:
```c
int main() {
RecordType r[100];
int m, i = 1;
while (1) {
scanf("%d", &m);
if (m == -1) break; // 输入 -1 作为结束标志
r[i].key = m;
i++;
}
int n = i - 1;
HeapSort(r, n);
return 0;
}
```
这样,当输入 `-1` 时,程序会跳出循环,开始进行排序,并输出排序结果。
阅读全文