这题我用堆排没给过..求助
查看原帖
这题我用堆排没给过..求助
449015
real1ze楼主2021/5/21 16:50

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]);
    }
    
    
}
2021/5/21 16:50
加载中...