[英]Using threads to sort two halves of an array, but only second half is being sorted
[英]The elements in an array seems to be changing, array's first half sorted and second half is randomized
该程序旨在根据用户输入的数组大小给出随机数。 rand()
正在工作并根据用户提供输出元素。
问题是当涉及到排序的部分时,数组的元素似乎从不同的值发生变化。
#include <iostream>
#include <ctime>
using namespace std;
int SizeArray = 0;
int setArray[] = { NULL };
int tempA, half;
int main() {
cout << "Enter number of elements: ";
cin >> SizeArray;
srand(time(0));
for (int i = 0; i < SizeArray; i++) {
setArray[i] = 51 + rand() % (100 - 51);
}
cout << "\n\n\nraw input " << endl;
for (int i = 0; i < SizeArray; i++) {
cout << setArray[i] << "\t";
}
half = SizeArray / 2;
cout << "\n\n\nfirst half " << endl;
for (int j = 0; j < half; j++){
for (int i = 0; i < half; i++){
if (setArray[i] > setArray[i + 1]){
tempA = setArray[i];
setArray[i] = setArray[i + 1];
setArray[i + 1] = tempA;
}
}
}
for (int i = 0; i < half; i++){ //to print the sorted array
cout << setArray[i] << "\t";
}
cout << "\n\n\nsecond half " << endl;
for (int i = half; i < SizeArray; i++){ //to print the second half
cout << setArray[i] << "\t";
}
cout << "\n\n\nmerge " << endl;
for (int i = 0; i < SizeArray; i++) { //to print all elements of the array
cout << setArray[i] << "\t";
}
}
我希望知道为什么元素会发生变化以及有哪些可能的解决方案。
int setArray[] = { NULL };
创建一个包含一个元素的数组。 如果您尝试访问除setArray[0]
任何内容,则会出现未定义的行为,这就是您所看到的。
由于在编译时不知道元素的数量,请改用std::vector<int>
。
#include <vector>
// ...
std::vector<int> setArray;
然后,当用户输入应该有多少个元素时,执行:
setArray.resize(SizeArray);
一个不相关的问题是您实际上并没有从用户那里获取任何输入。 在输入循环中,打印已经存在的值:
cout << "\n\n\nraw input " << endl;
for (int i = 0; i < SizeArray; i++) {
cout << setArray[i] << "\t"; // cin >> setArray[i] ???
}
您的程序有未定义的行为。
线
int setArray[] = { NULL };
创建一个包含一个元素的数组。 从它访问任何索引高于 0 的元素会导致未定义的行为。
您需要创建一个动态分配的数组。 我的建议是使用std::vector<int>
。
// Move themm inside main.
// int SizeArray = 0;
// int setArray[] = { NULL };
// int tempA, half;
int main()
{
int SizeArray = 0;
int tempA, half;
cout << "Enter number of elements: ";
cin >> SizeArray;
// Construct a vector with size SizeArray.
std::vctor<int> setArray(SizeArray);
// Rest of your program.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.