程序执行并输出已排序的数组,但程序崩溃。请帮助我理解为什么以及如何解决。 win7上的语言和环境是c ++和VS.
//test for ordering numbers
#include <iostream>
using namespace std;
int main()
{
int numbers[3];
numbers[0] = 33;
numbers[1] = 13;
numbers[2] = 23;
int i = 0;
int temp = 0;
for(int i = 0; i < 3; i++)
{
if(numbers[i] > numbers[i+1])
{
temp = numbers[i];
numbers[i] = numbers[i+1];
numbers[i+1] = temp;
temp = 0;
}
}
}
答案 0 :(得分:1)
在for
循环中,当i
为2时,您正在访问numbers[3]
out of range
访问权限。
请记住,当您声明int numbers[3]
时,您声明了一个包含3个元素的数组:numbers[0]
,numbers[1]
和numbers[2]
答案 1 :(得分:0)
通常,冒泡排序如下所示:
for(int x=0; x< n; x++)
{
for(int y=0; y< n-1; y++)
{
if(numbers[y]>numbers[y+1])
{
int temp = numbers[y+1];
numbers[y+1] = numbers[y];
numbers[y] = temp;
}
}
}
在您的情况下,只需要一次交换,因此您不需要外部循环。但是,如果需要多次交换,则需要外部循环。例如:
int numbers[7];
numbers[0] = 33;
numbers[1] = 53;
numbers[2] = 23;
numbers[3] = 4;
numbers[4] = 23;
numbers[5] = 10;
numbers[6] = 25;
int n = 7;
// Without this outer loop
// Output: 33 23 4 23 10 25 53
// With outer loop
// Output: 4 10 23 23 25 33 53
for (int x= 0; x < n; x++) {
for(int y=0; y< n-1; y++)
{
if(numbers[y]>numbers[y+1])
{
int temp = numbers[y+1];
numbers[y+1] = numbers[y];
numbers[y] = temp;
}
}
}
for (int i = 0; i < 7; i++)
std::cout << numbers[i] << " ";