const int N = 5;
int person[] = {2, 3, 12, 5, 19};
int big = 0;
int small = 100;
int i;
for (i = 0; i <= N; i++)
{
cout << "Person[" << i << "] ate: " << person[i] << endl;
//cin >> person[i];
for (int j = i+1; j <= N; j++)
{
if (person[i] < person[j])
{
int tmp = person[i];
person[i] = person[j];
person[j] = tmp;
}
}
if (person[i]>big)
big=person[i];
if (person[i]<small)
small=person[i];
}
cout << "Person[" << i << "] ate the most pancakes: " << big << endl;
cout << "Person[" << i << "] ate the least pancakes: " << small << endl;
cout << "Sorted:" << endl;
for (i = 0; i < N; i++)
{
cout << "Person[" << i << "]: " << person[i] << endl;
}
system("pause");
我弄乱了那些数组,它一直向我显示2但气泡分类工作。另一个问题是如何从最小值获取数组索引,从最高值获取数组索引?
答案 0 :(得分:1)
数组索引从零开始,因此如果有N
个元素,则最后一个元素将位于N-1
索引处。索引N
处的访问元素超出范围。
for (i = 0; i <= N; i++)//should run till `N-1`
^^^
for (int j = i+1; j <= N; j++)//should run till `N-1`
^^^
如果你想要最高和最低元素的索引,因为你已经对数组进行了排序,最小值的索引将是0
,最高值的索引将是{{1 (在你的情况下相反,因为你按降序排列了数组)
答案 1 :(得分:1)
在C ++中,数组 ZERO 0
indexed。所以你应该改变你的for循环:
for (i = 0; i < N; i++)
^^^
{
// some code...
for (int j = i+1; j < N; j++)
^^^
{
// some code...
由于:
index -> 0 1 2 3 4
person[] = {2, 3, 12, 5, 19};
在您的代码中,i
和j
的值将增加到N
5
。这意味着您正在尝试访问名为person
的第5个索引的数组,这将创建数组索引超出范围的错误。