堆排序.......怎么就排不了啊????
#include<stdio.h>typedef struct{
int Heap[100];
int N;
}Sqlist;
void HeapSort(Sqlist H) {
int i,m;
for(i=H.N/2;i>0;--i)
HeapAdjust(H,i,H.N);
for(i=H.N;i>1;--i) {
m=H.Heap[1];
H.Heap[1]=H.Heap[i];
H.Heap[i]=m;
HeapAdjust(H,1,i-1);
}
}
HeapAdjust(Sqlist H, int s, int m) {
int c,j;
c=H.Heap[s];
for(j=2*s;j<=m;j*=2) {
if(j<m&&H.Heap[j]<H.Heap[j+1]) ++j;
if(c>=H.Heap[j]) break;
H.Heap[s]=H.Heap[j];
s=j;
}
H.Heap[s]=c;
}
PrintSqList(Sqlist H)
{
int i;
for(i=1;i<H.N;i++)
printf("%d ",H.Heap[i]);
printf("%d\n",H.Heap[H.N]);
}
main()
{
int i;
Sqlist H;
scanf("%d",&H.N);
for(i=1;i<=H.N;i++)
scanf("%d",&H.Heap[i]);
for(i=0;i<H.N;i++)
HeapSort(H);
PrintSqList(H);
}
为什么 for(i=H.N/2;i>0;--i)
HeapAdjust(H,i,H.N);
for(i=H.N;i>1;--i) {
m=H.Heap[1]; 走这块时候H所指的数值又回到了输入时候的数值
[[it] 本帖最后由 20072815 于 2008-10-22 21:36 编辑 [/it]]