簡體   English   中英

冒泡排序的 C++ 問題

[英]C++ issue with bubble sort

我正在嘗試在我不熟悉的 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

提前致謝

你有兩個明顯的問題。

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

您的代碼存在多個問題:

  • 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

你的比較是錯誤的:

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);

順便說一句,關於它制作二維數組的評論是錯誤的。

2個變化/問題:

  1. 當數據相同時為什么要交換? 你只需要在 i < k 和 arr[i] > arr[k] 時交換。

  2. 內部循環訪問k+1時越界,應該是k

.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM