算法实验3-2

贪心策略,多机调度

#include<bits/stdc++.h>
using namespace std;
int project[100];
int M[100];
vector<int> project_x;
struct x{
    vector<int> s;
}S[100];
int partition(int a[],int left,int right)
{
    int exchange = 0;
    int i = left;
    int j = right + 1;

    int t = a[left];

    while(1)
    {
        while( a[--j] >= t && j > left)
            ;
        while( a[++i] < t && i < right)
            ;
            //此处a[j]<t a[i]>=t
            if( i < j )
            {
                exchange = a[j];
                a[j] = a[i];
                a[i] = exchange;
            }
            else
            {
                break;
            }
    } 
    //跳出循环的时候i>=j,循环里面的if没执行, 所以仍然是a[i]>=t && a[j]<t; 
	//像这样 “。。。。。j i 。。。。。。”
    exchange = a[j];
    a[j] = t;
    a[left] = exchange;

    return j;
}
void Quicksort(int a[],int first,int end)
{
    int pivot = 0;
    if(first < end)
    {
        pivot = partition(a, first, end);
        Quicksort(a, pivot + 1, end);
        Quicksort(a, first, pivot - 1);
    }
}
int main()
{
    int m, n;
    cout << "请输入机器数量: \n";
    cin >> m;
    cout << "请输入作业数量: \n";
    cin >> n;

    cout << "请输入各个作业的执行时间: \n";
    for (int i = 0; i < n; i++)
    {
        cin >> project[i];
    }

    Quicksort(project, 0, n - 1);
    cout << "快速排序后:\n";
    for (int i = 0; i < n; i++)
    {
       cout << project[i] << "  ";
    }
    cout << endl;
    cout << "倒着看排序:\n";
    for (int i = n - 1; i >= 0; i--)
    {
         project_x.push_back(project[i]);
    }
    for (int i = 0; i < project_x.size(); i++)
    {
        cout << project_x[i]<<"  ";
    }
    cout << endl;
    for (int i = 0; i < m; i++)
    {
        M[i] = project_x[i];
        S[i].s.push_back(i);
    }
    int min = 0;
    int j = 0;
    for (int i = m; i < n; i++)
    {
        min = M[0];
        j = 0;
        for (int k = 1; k < m; k++)
        {
            if ( M[k] < min)
            {
                min = M[k];
                j = k;
            }
        }
        S[j].s.push_back(i);
        M[j] += project_x[i];
    }

    for (int i = 0; i < m; i++)
    {
        cout << "机器:" << i << "的作业队列: ";
        for (int j = 0; j < S[i].s.size(); j++)
        {
            cout << project_x[S[i].s[j]]<<"  ";
        }
        cout << "总工作时间为: " << M[i];
        cout << endl;
    }


        system("pause");
}

在这里插入图片描述

posted @ 2021-05-23 11:56  在天边偷看小天使  阅读(5)  评论(0)    收藏  举报  来源