欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MyDS 堆排序 通过cf

程序员文章站 2024-03-23 15:54:34
...

堆排序跑的很快,比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--;
    }
}