我正在寻求一个暗示以下列方式对数组排序的问题的帮助:所有偶数必须在奇数之前。我已经解决了部分问题,但是我以相反的方式进行了排序,因此无法解决它。
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int v[100], n, i, aux = 0, inv;
cout << "Number of elements: ";
cin >> n;
for (i = 0; i < n; i++)
{
cout << "v[" << i << "]=";
cin >> v[i];
}
do
{
inv = 0;
for (i = 0; i < n; i++)
{
if (v[i] % 2 == 1 && v[i + 1] % 2 == 0)
{
inv = 1;
aux = v[i];
v[i] = v[i + 1];
v[i + 1] = aux;
}
}
} while (inv != 0);
cout << endl;
for (i = 0; i < n; i++)
cout << v[i] << " ";
cout << endl;
system("pause");
return 0;
}
输出为:
n = 8
1 3 2 4 7 8 4 2
Result: 2 4 8 4 2 -858993460 1 3
答案 0 :(得分:1)
在表达式v[i + 1]
中,当v[n]
时访问i = n - 1
,这将导致超出范围的内存访问,从而导致undefined的行为。
您应该将for
循环更改为此:
for (i = 0; i < n - 1; i++)
给定输入的输出为:
a.exe
Number of elements: 8
v[0]=1
v[1]=3
v[2]=2
v[3]=4
v[4]=7
v[5]=8
v[6]=4
v[7]=2
2 4 8 4 2 1 3 7