我遇到冒泡排序问题。我按降序排序了8个数字的数组;但是,当打印到屏幕时,第一个数字不在数组中。它就像是一个出界的错误,或打印一些内存内容。任何帮助表示赞赏。
#include <iostream>
using namespace std;
void sortArray(int nums[]);
void printArray(int nums[]);
int main()
{
int nums[8] = {3, 6, -19, 5, 5, 0, -2, 99};
sortArray(nums);
printArray(nums);
system("pause");
return 0;
}
void sortArray(int nums[])
{
bool swap;
int temp;
do
{
swap = false;
for(int i = 0; i < 8; i++)
{
if(nums[i] < nums[i+1])
{
temp = nums[i];
nums[i] = nums[i+1];
nums[i+1] = temp;
swap = true;
}
}
}while(swap);
}
void printArray(int nums[])
{
for(int i = 0; i < 8; i++)
{
cout << nums[i] << ", ";
}
cout << endl;
}
答案 0 :(得分:1)
您正在使用以下内容访问数组末尾之外的元素:
for(int i = 0; i < 8; i++)
{
if(nums[i] < nums[i+1])
如果i
达到7,则i+1
超出范围。
顺便说一下,您应该考虑使用std::vector
而不是普通数组。
答案 1 :(得分:1)
首个C ++课程?我又是TA了。
int数组,大小= 8,即索引0到7。
在你的for(int i = 0; i&lt; 8; i ++)中你试图访问nums [i + 1],当i = 7时会发生什么?访问nums [8],对吧?
此外,这不是一个冒泡排序,它是关闭的,但实际上并非如此。再次阅读你的教科书。
答案 2 :(得分:0)
for(int i = 0; i < 8; i++)
{
if(nums[i] < nums[i+1])
{
temp = nums[i];
nums[i] = nums[i+1];
nums[i+1] = temp;
swap = true;
}
}
当i
为7时,您正在访问i+1
的界限。