这个堆排序哪里有错呀 谢谢
查看原帖
这个堆排序哪里有错呀 谢谢
1026713
wagawaga楼主2024/4/11 16:22
#include <stdio.h>

int siz;
int a[200005],b[100005],ls[100005],rs[100005],u[100005];
void phase (int pos) {
    if (ls[pos] <= siz && a[u[ls[pos]]] > a[u[rs[pos]]] && a[u[ls[pos]]] > a[u[pos]]) {
        int tmp_pos = u[pos];
        u[pos] = u[ls[pos]];
        u[ls[pos]] = tmp_pos;
        phase (ls[pos]);
    } 
    else if (rs[pos] <= siz && a[u[rs[pos]]] > a[u[ls[pos]]] && a[u[rs[pos]]] > a[u[pos]]) {
        int tmp_pos = u[pos];
        u[pos] = u[rs[pos]];
        u[rs[pos]] = tmp_pos;
        phase (rs[pos]);
    }
}
int main () {
    int n; scanf ("%d",&n);
    for (int i = 1;i <= n;i ++) {
        scanf ("%d",&a[i]);
        u[i] = i;
        ls[i] = i << 1;
        rs[i] = i << 1 | 1;
    }
    siz = n;
    for (int i = n / 2;i >= 1;i --) {
        phase (i);
    }
    for (int i = 1;i <= n;i ++) {
        b[i] = a[u[1]];
        u[1] = u[siz];
        siz --;
        phase (1);
    }
    for (int i = n;i >= 1;i --) printf ("%d ",b[i]);
    printf ("\n");
    return 0;
 }
2024/4/11 16:22
加载中...