C++带有期限和效益的单位时间的作业排序贪心算法JS

余祥宣, 崔国华, 邹海明. 计算机算法基础.3版[M]. 华中科技大学出版社, 2006.
P107 算法5.4

#include<iostream>
using namespace std;

int JS(int D[], int J[], int n, int k)
{
    int r,i;
    D[0] = J[0] = 0;
    k = 1;
    J[1] = 1;
    for ( i = 2; i <=n; i++)
    {
        r = k;
        while (D[J[r]] > D[i] &&D[J[r]] != r)
            r--;

        if (D[J[r]]<=D[i] && D[i]>r)
        {
            for (int j = k; j > r ; j--)
                J[j + 1] = J[j];

            J[r + 1] = i;
            k++;
        }
    }
    return k;
}

void SORT(int P[], int D[], int start,int end)
{
    for (int i = start+1; i <= end; i++)
    {
        int item = P[i];
        int item_d = D[i];
        int j = i - 1;
        while (j>=start&&item > P[j])
        {
            P[j + 1] = P[j];
            D[j + 1] = D[j];
            j--;
        }
        P[j + 1] = item;
        D[j + 1] = item_d;
    }
}

int main()
{
    const int MAX = 8;
    int P[MAX] = { 0,30,25,20,15,10,5,35 };
    int D[MAX] = { 0,2,4,3,4,8,3,4};

    //int P[MAX] = { 0,15,12,11,10,8,5,4 };
    //int D[MAX] = { 0,2,3,1,3,4,5,2};
    int J[MAX];
    int n = 7;

    cout <<"i\tP[i]\tD[i]\t Before Sort" << endl;
    for (int i = 1; i <=n; i++)
    {
        cout<<i<<"\t" << P[i] << "\t" << D[i] << "\t"  << endl;
    }
    cout << endl;
    SORT(P, D,1, n);
    cout << "i\tP[i]\tD[i]\t After Sort" << endl;
    for (int i = 1; i <= n; i++)
    {
        cout << i << "\t" << P[i] << "\t" << D[i] << "\t" << endl;
    }
    cout << endl;
    n=JS(D, J, n, 0);

    cout << "i\tJ[i]\tP[J[i]]\tD[J[i]]\t Result" << endl;
    for (int i = 1; i <=n; i++)
    {
        cout<<i<<"\t"<<J[i]<<"\t"<<P[J[i]]<<"\t"<<D[J[i]]<<"\t"<<endl;
    }

    int sum = 0;
    for (int i = 1; i <= n;i++)
    {
        cout << "->" << J[i];
        sum += P[J[i]];
    }
    cout << "\tsum=>" << sum;
    system("pause");
    return 0;
}

运行结果
C++带有期限和效益的单位时间的作业排序贪心算法运行结果1
C++带有期限和效益的单位时间的作业排序贪心算法运行结果2

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值