C ++数组未正确排序

时间:2018-12-06 14:15:42

标签: c++ arrays sorting

我想按单价对金块进行排序,所以我用变量quant和price制作了一个金块类,然后制作了一个双单位,即price / quant。矿块分为4、6和9包

当我分别输入10、10和10的价格时,我应该得到一个排序为9pack,6pack和4pack的数组,因为10/9小于10/6和10/4。但是事实并非如此。

#include <iostream>
using namespace std;

class Nugget {
    public:
        int price;
        int quant;
        double unit;

        Nugget(int price, int quant) {
            this->price = price;
            this->quant = quant;
            this->unit = price/quant;
        }
};

int main(){    
    int n4,n6, n9;
    cin >> n4 >> n6 >> n9;

    Nugget* nuggetArr[3] = {new Nugget(n4,4), new Nugget(n6,6), new Nugget(n9,9)};

    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            if (nuggetArr[j]->unit > nuggetArr[i]->unit) {
                Nugget* temp = nuggetArr[i];
                nuggetArr[i] = nuggetArr[j];
                nuggetArr[j] = temp;    
            }
        }

        for (int j = 0; j < 3; j++)
            cout << nuggetArr[j]->quant << ' ';
        cout << endl << endl;
    }

    for (int i = 0; i<3; ++i)
        cout << nuggetArr[i]->quant << ' ';

    return 0;
};

2 个答案:

答案 0 :(得分:0)

您要使用什么sorting algorithm

如果将nuggetArr[i]换成nuggetArr[j],则应确保i < j升序或i > j降序。 例如:

    for (int i = 0; i < 3; ++i) {
        for (int j = i + 1; j < 3; ++j) {
        if (nuggetArr[j]->unit > nuggetArr[i]->unit) {
            Nugget* temp = nuggetArr[i];
            nuggetArr[i] = nuggetArr[j];
            nuggetArr[j] = temp;    
        }
    }

您的代码在对象(块)周围移动,没有保持一定顺序。 例如,将nuggetArr[1]交换为nuggetArr[2],然后将nuggetArr[2]交换为nuggetArr[1]

仅供参考,这类似于Selection sort

答案 1 :(得分:0)

C ++在这里使用了多种转换方式。在分配之前,它一直使用整数,因此即使您使用double,单位值也将是整数。如果您进行以下更改,您会发现它会起作用(请注意,这只是为了说明要点,由于精度原因,不适合使用它)

...
double price;
double quant;
...
this->unit = this->price/this->quant;
...

希望这会有所帮助

作为一个更准确的说明,如果a,b是整数,则默认情况下a / b将是整数,并且除以后仅将其转换为双精度。