堆排序,自己测试没问题,求助大佬,不知道哪里有问题
查看原帖
堆排序,自己测试没问题,求助大佬,不知道哪里有问题
732523
ZGC1111楼主2022/7/24 10:01
#include<iostream>
#include<math.h>
#include<iomanip>
#include<string>
#include<algorithm>
using namespace std;
long long N, B,s;
int a[100000];

void down(int i)
{
    while ((2*i+1)<N&&a[i]<a[2*i+1]||(2*i+2)<N&&a[i]<a[(2*i+2)])
    {
        if (a[2 * i + 1] > a[2 * i + 2])
        {
            swap(a[i], a[2 * i + 1]);
            i = 2 * i + 1;
        }
        else
        {
            swap(a[i], a[i * 2 + 2]);
            i = 2 * i + 2;
        }
    }
}

void up(int i)
{
    while ((i-1)/2>=0&&a[i]>a[(i-1)/2])
    {
        swap(a[i], a[(i - 1) / 2]);
        i = (i - 1) / 2;
    }
}

void Show(int n)
{
    for (int i = 0; i <= n; i++)
       cout << a[i] << " ";
}

int main()
{   
    cin >> N >> B;
    int k;
    for (int i = 0; i < N; i++)
    {
        cin >> a[i];
        up(i);
    }
   
    int L = N-1,j=0;
    while (s<B)
    {
        j++;
        s += a[0];
        //cout << a[0]<<" ";
        a[0] = a[L];
        /*Show(L);
        cout << endl;*/
        L--;
        down(0);
        /*Show(L); 
        cout<< endl;*/
    }
    cout << j;
    return 0;
}
2022/7/24 10:01
加载中...