繁体   English   中英

数组中的元素似乎在变化,数组的前半部分已排序,后半部分是随机的

[英]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";
  }
}

错误示例那里应该没有“4”

我希望知道为什么元素会发生变化以及有哪些可能的解决方案。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM