rt 想用堆排 中间三个点RE了,不懂问题在哪 求
#include<stdio.h>
#include<stdlib.h>
void heapify(int *a,int n,int i){
int lc=2*i+1;
int rc=2*i+2;
int max=i;
(a[max]<a[lc]&&lc<n)?(max=lc):(1);
(a[max]<a[rc]&&rc<n)?(max=rc):(1);
if(max!=i){
(a[i]==a[max])||(a[i]^=a[max],a[max]^=a[i],a[i]^=a[max]);
heapify(a,n,max);
}
}
int main(){
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=n/2-1;i>=0;i--){
heapify(a,n,i);
}
for(int i=n-1;i>=0;i--){
(a[0]==a[i])||(a[i]^=a[0],a[0]^=a[i],a[i]^=a[0]);
heapify(a,i,0);
}
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
}