[英]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個變化/問題:
當數據相同時為什么要交換? 你只需要在 i < k 和 arr[i] > arr[k] 時交換。
內部循環訪問k+1時越界,應該是k
.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.