我的气泡排序正在数组中引入'0'的值

My bubble sort is introducing values of '0' in array

本文关键字:的值 排序 气泡 数组 我的      更新时间:2023-10-16

我在C++程序中使用了"气泡排序",但它在分数贪婪程序中的数组中引入了随机的"0"值

int sorteaza()
{
    int aux,schimb,i;
    do
    {
        schimb=0;
        for (i=0;i<=n;++i)
            if (G[i][3]<G[i+1][3])
            {
            swap(G[i], G[i+1]);
            }
    }
    while (schimb);
}

这是我的整个代码:

#include<iostream>
using namespace std;
int n; // Numarul de elemente
float G[100][3]; // Obiecte + detalii masa profit potenta
int masa = 0;
int read_data()
{
cout << "Greutatea Rucsac" << endl;
cin >> masa;
cout << "Obiecte: " << endl;
cin >> n;
for(int i = 1; i<=n;i++)
{
    for(int j = 1; j<=2;j++)
    {
        cin >> G[i][j];
        if(G[i][1] != 0 && G[i][2] != 0)
        {
         G[i][3] = G[i][2] / G[i][1];
        }
    }
}
}
// 2 500
// 4 500
int sorteaza()
{
    int aux,schimb,i;
    do
    {
        schimb=0;
        for (i=0;i<=n;++i)
            if (G[i][3]<G[i+1][3])
            {
            swap(G[i], G[i+1]);
            }
    }
    while (schimb);
}
int verify()
{
for(int i = 1; i<=n;i++)
{
    for(int j = 1; j<=3;j++)
    {
        cout << G[i][j];
        cout << endl;
        //G[i][3] = G[i][1] / G[i][2];
    }
}
}
int greedy()
{
    float profit = 0;
    int i = 1;
    int aux;
    while(i<=n && masa>=0)
    {
        //cout << "G[i][1]: " << G[i][1] << endl;
        if(masa>=G[i][1]) {
        //cout << "Am ajuns aici";
        profit=profit+G[i][2];
        masa=masa-G[i][1];
        }
        else {
                        //cout << "Am ajuns dincolo";
                aux= (masa*100)/G[i][1];
                profit = profit + (aux * G[i][2])/100;
                break;
                        }
    i++;
   }
cout << profit;
    }





int main()
{
    read_data();
    sorteaza();
    verify();
   // greedy();
}

学习从零开始索引所有数组。

float G[100][3];

法律索引为 0 到 99 和 0 到 2。所以这段代码应该是

for (int i = 0; i < n; i++)
{
    for (int j = 0; j < 2; j++)
    {
        cin >> G[i][j];
    }
    if (G[i][0] != 0 && G[i][1] != 0)
    {
        G[i][2] = G[i][1] / G[i][0];
    }
}

而这段代码应该是

        if (G[i][2] < G[i+1][2])
        {
            swap(G[i], G[i+1]);
        }

所有数组都从零开始。我相信你已经被告知这一点,但你必须开始将其付诸实践。

一般来说,像这样写你的 for 循环

for (int i = 0; i < N; ++i)

这是大小N数组的正确循环。

您可能需要<n而不是≤n(这就是未初始化值即 0 的来源(。你错过了气泡排序中的一个循环。现在,您只是将最小的元素冒泡到列表的末尾。

也不知道你在用那个schimb和同时条件做什么。

此外,您将 G 定义为 float[100][3] 因此您不能使用 G[i][3] ,只能使用 G[i][2]

int sorteaza()
{
    int i,j;
    for (i=0; i<n; i++)
    {
        for (j=i+1; j<n; j++)
        {
            if (G[i][2] < G[j][2])
            {
                swap(G[i], G[j]);
            }
        }
    }
}