Cormen에서 제공하는 힙 정렬 알고리즘을 구현하려고합니다. 내 코드는 다음과 같습니다 :Cormen의 HeapSort 알고리즘 구현 C
#include<stdio.h>
#include<conio.h>
void max_heapify(int *,int);
void build_max_heap(int *,int);
void heapsort(int *,int);
void swap(int,int);
int heapsize;
int main()
{
int *arr,n,i;
printf("Enter no. of elements = ");
scanf("%d",&n);
arr=(int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
{
printf("Enter array elements = ");
scanf("%d",&arr[i]);
}
//heapsize = n;
heapsort(arr,n);
printf("\nAfter heapsort \n");
for(i=0;i<n;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
void heapsort(int *arr,int len)
{
int i;
build_max_heap(arr,len);
for(i= len-1;i>=1;i--)
{
swap(&arr[0],&arr[i]);
heapsize = heapsize -1;
max_heapify(arr,0);
}
}
void max_heapify(int *arr,int i)
{
int l=2*i,r=2*i+1,largest;
if(l<heapsize && arr[l]>arr[i])
largest = l;
else
largest = i;
if(r<heapsize && arr[r]>arr[largest])
largest = r;
if(largest != i)
{
swap(&arr[i],&arr[largest]);
max_heapify(arr,largest);
}
}
void build_max_heap(int *arr,int len)
{
heapsize = len;
int i;
for(i =len/2;i>=0;i--)
{
max_heapify(arr,i);
}
}
void swap(int *a ,int *b)
{
int temp = *a;
*a= *b;
*b= temp;
}
내 코드에서 정확히 무엇이 잘못되었는지 알 수 없습니다. 배열이 정렬되지 않습니다. 사실 원래 배열이 인쇄됩니다. 내가 어디로 잘못 가고 있니?
'swap'은 완전히 잘못되었습니다 (포인터!), 배열의 값을 max_heapify로 바꾸는 것은 많은 의미가 없습니다. – Nbr44
예 .. 바뀌었고 잘 작동합니다 .. [제안 된 변경 사항과 함께] 코드도 편집했습니다 – Daggerhunt