数组在函数内未正确播放 - 气泡排序



我现在正在学习如何用 c++ 对数组进行气泡排序。我已经完成了大部分工作,但现在在打印数组的函数中,数组中的最后一个数字被替换为垃圾号。
我怀疑这与函数中的 for 循环未正确"播放"数组有关,但我不确定。

#include <iostream>
using namespace std;
void showArray(int sortMe[], int size);
int main()
{
int sortMe[4] = {10, 2, 3, 1}; // Original Array
int numElements = 4;
int temp; // For swapping
cout << "Before sort: ";
showArray(sortMe, numElements);
for (int i=numElements-1; i>0; i--) { // For loop1
for(int j=0; j<i; j++) {
// Checks if the value on left is bigger than the right
if(sortMe[j] > sortMe[j+1]) {
// If bigger swap values
temp = sortMe[j];
sortMe[j] = sortMe[j+1];
sortMe[j+1] = temp;
}
}
}
cout << "After sort: ";
showArray(sortMe, numElements);
}
void showArray(int sortMe[], int size) {
// Outputs array in format array = {num1, num2, etc.}
int i;
cout << "Array = {";
for (int i = 0; i < size - 1; i++) {
cout << sortMe[i] << ", ";
}
cout << sortMe[i] << "}" << endl;
}

我得到的输出是:

Before sort: Array = {10, 2, 3, 11867600}
After sort: Array = {1, 2, 3, 1}
Process returned 0 (0x0)   execution time : 0.101 s
Press any key to continue.

在你的函数ShowArray中,你似乎期望这里

cout << sortMe[i] << "}" << endl;
i

等于大小1。
事实并非如此,因为循环的计数器i仅存在于循环中。
这是因为这两条线创建了一个外部和一个内部i

int i; // outer i
for (int i = 0; i < size - 1; i++) { // inner i

i是计数器,最终出现在size-1,但立即不复存在。
i是您使用的那个

cout << sortMe[i] << "}" << endl;

并且它没有初始化。当您访问该值时,您会得到未定义的行为。 这就是你得到垃圾的原因。

最新更新