MyDS 堆排序 通过cf

堆排序跑的很快,比sort()快一点点

//大根堆
void sift(int pos,int r,int a[]){
    int j=pos*2,temp=a[pos];
    while(j<=r){
        if(j<r&&a[j]<a[j+1])  j++;
        if(temp<a[j]) {
            a[pos]=a[j];
            pos=j;
            j=j*2;
        }
        else break;
    }
    a[pos]=temp;
}
vector<int>v;
void heap_sort(int l,int r,int a[]){
    for(int i=r/2;i>=l;i--) sift(i,r,a);
    while(r){
        v.push_back(a[1]);
        a[1]=a[r];
        sift(1,r-1,a);
        r--;
    }
}

你可能感兴趣的:(MyDS 堆排序 通过cf)