今C言語でソートのところを勉強していてヒープソートを作ろうとおもったのですが
どうにもうまくいきません
#include <stdio.h>
#define HMAX 50
int uu=0;
struct heap{
int box[HMAX];
int size;
};
void swap(int *u,int *v){
int tmp;
tmp = *u;
*u=*v;
*v=tmp;
}
void create(struct heap *h){
h->size=0;
}
void insert(struct heap *h, int item){
int i;
i=++h->size;
h->box=item;
while(i>1 && h->box < h->box[i/2]){
swap(&h->box , &h->box[i/2]);
i/=2;
}
}
int findmin(struct heap *h){
return(h->box[1]);
}
void deletemin(struct heap *h){
int i,k;
i=1;
h->box[1] = h->box[h->size];
--h->size;
while(2*i <= h->size){
k=2*1;
if(k < h->size && h->box[k] > h->box[k+1]){
k++;
}
if(h->box <= h->box[k]){
break;
}
swap(&h->box,&h->box[k]);
i=k;
}
}
int main(void){
struct heap b;
int no,ans,ape;
printf("要素挿入?yes...1 no...0");fflush(stdout);
scanf("%d",&ans);
if(ans==1){
while(ans==1){
create(&b);
printf("\nどんな数値を入力しますか?\n");fflush(stdout);
scanf("%d",&no);
insert(&b,no);
printf("続行?yes...1 no...0");fflush(stdout);
scanf("%d",&ans);
uu++;
}
for(ape=1;ape<=uu;ape++){
b.box[ape] = findmin(&b);
printf("%d ",b.box[ape]);fflush(stdout);
deletemin(&b);
}
printf("Heap sort is over.");fflush(stdout);
}
return 0;
}デバッグするとdeleteminがおかしいと思うのですが、何が間違っているのかわかりません。
どうか教えていただけないでしょうか、お願いします。