C ++冒泡排序问题

问题描述 投票:0回答:4

我正在尝试在C ++中使用冒泡排序,这是我的新手。到目前为止,这是我的代码:

我的问题是,当我尝试对数组进行排序时,整数数组在每个索引处都设置为零。

这与内存分配有关吗?

#include <iostream>
#include <cstring>
#include <array>

using namespace std;

int main() {
    //requires users input to create an array that wouldn't use too much memory
    cout << "Enter number of dealers you wish to enter" << endl;
    int array_size;
    cin >> array_size;
    std::string sales_names[array_size]; //makes a 2D array that can have 15 rows and 2 colums {Name, sales total}
    int sales_data[array_size];

    for(int i = 0; i < array_size; i++){
        std::string dealers_name;
        int dealers_value;
        cout << "Enter Dealers Name: ";
        cin >> dealers_name;
        cin.clear();
        cout << "Enter Dealers Sales: ";
        cin >> dealers_value;
        sales_names[i] = dealers_name;
        sales_data[i] = dealers_value;
        cout << endl;
    }

    string temp_name;
    int temp_value;

    //Bubble Sort?
    for(int i = 0; i < array_size; i++){
        for(int k = 0; k < array_size; k++){
            if(sales_data[k] = sales_data[k+1])
            {
                temp_value = sales_data[k];
                temp_name = sales_names[k];

                sales_data[k] = sales_data[k+1];
                sales_names[k] = sales_names[k+1];

                sales_data[k+1] = temp_value;
                sales_names[k+1] = temp_name;
            }
        }
    }

    for(int i = 0; i < array_size; i++){
        cout << sales_data[i] << endl;
        cout << sales_names[i] << endl;
    }

    return 0;
}

不知道为什么,但是在for循环的第一个循环之后,sales_data数组中的每个项目都设置为0

这是我的输出:

Enter number of dealers you wish to enter
3
Enter Dealers Name:test1
 Enter Dealers Sales:12

Enter Dealers Name:test2
 Enter Dealers Sales:6

Enter Dealers Name:test3
 Enter Dealers Sales:9

0
test3
0
test2
0
test1

提前感谢

c++ sorting new-operator
4个回答
1
投票

您的代码存在多个问题:

  • sales_data[k] = sales_data[k+1]应该为sales_data[k] == sales_data[k+1]

  • [for(int k = 0; k < array_size; k++)循环应从i+1开始进行冒泡排序,也可以将条件更改为k < array_size-i-1


1
投票

您有两个明显的问题。

输入

for(int i = 0; i < array_size; i++){
    for(int k = 0; k < array_size; k++){
        if(sales_data[k] = sales_data[k+1])

您正在分配(=)而不是进行比较(==)。如果它们匹配的话,那就没有意义了。也许您想要少于?

此外,请注意要运行到k,并检查k+1


0
投票

您的比较是错误的:

if (sales_data[k] = sales_data[k + 1])

这应该是<(或>,取决于您要对升序还是降序进行排序)。即使您想测试是否相等,==也是正确的,而不是=。也在这里

for (int k = 0; k < array_size-1; k++) {

您应该放array_size-1,否则将超出范围。

还要注意,VLA实际上不是标准C ++的一部分。使用std::vector代替:

std::vector<std::string> sales_names(array_size);
std::vector<int> sales_data(array_size);

顺便说一下,关于二维阵列的评论是错误的。


-1
投票

正如@doctorlove所说,我没有在if语句中进行正确的比较。

© www.soinside.com 2019 - 2024. All rights reserved.