冒泡排序的 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
提前致谢
您的代码存在多个问题:
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);
顺便说一句,关于它制作二维数组的评论是错误的。
你有两个明显的问题。
在
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
2 changes/questions:
数据相同为什么要交换?你只需要交换如果 i < k 和 arr[i] > arr[k].
内循环访问k+1时越界,应该是k
.
我正在尝试在我不熟悉的 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
提前致谢
您的代码存在多个问题:
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);
顺便说一句,关于它制作二维数组的评论是错误的。
你有两个明显的问题。
在
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
2 changes/questions:
数据相同为什么要交换?你只需要交换如果 i < k 和 arr[i] > arr[k].
内循环访问k+1时越界,应该是k
.