需要关于如何将我的随机数数组连接到冒泡排序的帮助



我有随机数数组的代码,这很有效。我需要以某种方式将我的随机数数组放入冒泡排序。我知道我需要std:copy,但不知道如何将其组合在一起,并使其同时显示两个cout。任何指导都会有所帮助。

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
// This is the Random number Array
srand (time (NULL));
const unsigned int sizeOfArray = 10;
int numberArray [sizeOfArray];
for (int i = 0; i < sizeOfArray; i++)
{
numberArray [i] = rand() % 100;
cout << numberArray [i] << endl;
}

// This is the code for bubble sort
int myArray [] ;
int swapHolder = -1;
for (int index = 0; index <10; index++)
{
if (myArray [index] > myArray [index + 1])
{
swapHolder = myArray [index + 1];
myArray [index + 1] = myArray [index];
myArray [index] = swapHolder;
}
}
for (int index = 0; index < 10; index++)
{
cout << myArray [index] << ", ";
}
cout << endl;
}

这看起来更像C代码,而不是C++代码。C++向量比数组更容易处理。例如,要将numberArray复制到myArray,您需要执行

int myArray[sizeOfArray];
std::copy(numberArray, numberArray + sizeOfArray, myArray);

如果您使用矢量

auto myVector = numberVector;

我怀疑是否需要复制数组。如果你只需要显示随机数的结果,只需在排序前和排序后打印出来。然后可以对现有数组进行排序。

在实用工具标题中,您可以找到std::swap,它将有效地处理一行中的交换。

由于两个原因,你的泡沫分类不会按原样工作。

循环从0到9,这是数组的大小。在上一次迭代中,您检查myArray[9]>myArray[10]。由于myArray[10]不存在,您将获得访问冲突。

第二个问题是,数组中的一个循环不会对其进行排序。最大的值将在数组的末尾,但最小的值只向下移动了一个点,不一定在开头。传统的做法是重复循环,直到不再进行交换。

如果这不是家庭作业,那么将排序分离到另一个函数中或使用内置排序也是有意义的。

您可以将Bubble排序的代码制作成一个函数,该函数将数组作为参数并输出一个新数组(这不是最有效的方法,但由于您既想要原始数组又想要排序的数组,这是最好的方法(

所以你可以做这个

int bubbleSort(int arr[], int cap){
// Your code here
}

然后你可以调用你的函数sortedRandomArray = bubbleSort(numberArray, sizeOfArray);

我的语法可能有点偏离,但这是做事的一般方式。将其分离并使其成为函数是一种很好的做法。

最新更新