모든 변수와 배열이 int로 정의 된 경우 내 코드가 올바르게 작동하지만 형식을 부호없는 int로 변경하면 작동하지 않습니다.배열에서 배열로 변환 할 때 힙 정렬 C가 작동하지 않습니다.
#include <stdio.h>
#include <stdlib.h>
void swap(unsigned int *a, unsigned int *b){
unsigned int temp;
temp=*a ; *a=*b ; *b=temp;
}
void heapify(unsigned int A[], unsigned int i, unsigned int n){
//sort from root i
unsigned int L = 2*i+1;
// node left child
unsigned int R = 2*i+2;
//node right child
unsigned int max = i;
//set max node is root
if(L < n && A[L] > A[max]) max = L;
//if node child > max, set that node is max
if(R < n && A[R] > A[max]) max = R;
if(max != i) {
swap(&A[i], &A[max]);
heapify(A, max, n);//recursive tree with root is node swaped
}
}
void buildHeap(unsigned int A[], unsigned int n){
unsigned int i = n/2 - 1;
for(; i >= 0; i--) heapify(A, i, n);
}
void heapSort(unsigned int A[], unsigned int n){
buildHeap(A, n);
unsigned int i = n-1;
for(; i >= 0; i--){
swap(&A[0], &A[i]);
heapify(A, 0, i);
}
}
void PrintArray(unsigned int A[], unsigned int n){
unsigned int i;
for(i = 0; i < n; i++){
printf("%d ", A[i]);
}
}
int main(){
unsigned int A[]={1,6,8,9,7,1,65,92,2,9,2,5,73,9,1,5};
unsigned int n=sizeof (A)/sizeof(unsigned int);
PrintArray(A,n);
heapSort(A,n);
PrintArray(A,n);
}
출력은 기존의 배열과 아무것도 그 이후에 발생하는 인쇄에 붙어 :
다음은 내 코드입니다.
어떻게해야합니까?
'i'가 서명되지 않은 경우 'i'는 항상 '> = 0'입니다. 컴파일러에서 경고해야합니다. 그렇지 않다면'-Wall'로 컴파일 해보십시오. 그리고 컴파일러가 제공하는 모든 경고를 항상 수정하십시오. – user3386109
Tks guy, 당신은 내 목숨을 구하십시오. –