C++ 结构冒泡排序
C++ Struct Bubble Sorting
我必须只使用 iostream 和 fstream 对 C++ 结构进行冒泡排序,但似乎出了点问题(请参阅下面的输入和输出)。
void sortCarsByPrice(Cars carsArray[])
{
int index1;
int index2;
int index3;
int swap;
int yearTemp;
char makeTemp;
char modelTemp;
float priceTemp;
int availTemp;
do
{
swap = 0;
for (index1 = 0; index1 < 5; index1++)
{
if (carsArray[index1].price > carsArray[index1 + 1].price)
{
yearTemp = carsArray[index1].year;
carsArray[index1].year = carsArray[index1 + 1].year;
carsArray[index1 + 1].year = yearTemp;
for (index2 = 0; carsArray[index1].make[index2] != '[=10=]' && carsArray[index1 + 1].make[index2] != '[=10=]'; index2++)
{
makeTemp = carsArray[index1].make[index2];
carsArray[index1].make[index2] = carsArray[index1 + 1].make[index2];
carsArray[index1 + 1].make[index2] = makeTemp;
}
for (index3 = 0; carsArray[index1].model[index3] != '[=10=]' && carsArray[index1 + 1].model[index3] != '[=10=]'; index3++)
{
modelTemp = carsArray[index1].model[index3];
carsArray[index1].model[index3] = carsArray[index1 + 1].model[index3];
carsArray[index1 + 1].model[index3] = modelTemp;
}
priceTemp = carsArray[index1].price;
carsArray[index1].price = carsArray[index1 + 1].price;
carsArray[index1 + 1].price = priceTemp;
availTemp = carsArray[index1].available;
carsArray[index1].available = carsArray[index1 + 1].available;
carsArray[index1 + 1].available = availTemp;
swap += 1;
}
}
}
while (swap != 0);
cout << "SORTED!" << endl;
return;
}
输入:
0 2014 Toyota Tacoma 5.12 0
1 2015 Ford Fusion .89 1
2 2009 Dodge Neon .25 0
3 2015 Ford F150 2.83 1
4 2016 Subaru Outback .27 1
输出:(排序后)
0 999984304 �yota Ծ0#on $-1.84172e+33 32566
1 2009 Dodg Neonma .25 0
2 2016 Subae Outb .27 1
3 2015 Ford Fusi .89 1
4 2015 Fordru F150U�� 2.83 1
如果您的数组中有 5 个元素,并且您使用 index1 + 1
作为循环内的索引,那么您只希望 index1
达到 4。如所写,您允许index1
上升到 5,这意味着 index1 + 1
是 6,这大概超出了数组的末尾。
更好的是,您可能希望向您的函数添加一个额外的参数,即数组中元素的数量,而不是在您的排序函数中间有一个神秘(且不正确)的 5。
我必须只使用 iostream 和 fstream 对 C++ 结构进行冒泡排序,但似乎出了点问题(请参阅下面的输入和输出)。
void sortCarsByPrice(Cars carsArray[])
{
int index1;
int index2;
int index3;
int swap;
int yearTemp;
char makeTemp;
char modelTemp;
float priceTemp;
int availTemp;
do
{
swap = 0;
for (index1 = 0; index1 < 5; index1++)
{
if (carsArray[index1].price > carsArray[index1 + 1].price)
{
yearTemp = carsArray[index1].year;
carsArray[index1].year = carsArray[index1 + 1].year;
carsArray[index1 + 1].year = yearTemp;
for (index2 = 0; carsArray[index1].make[index2] != '[=10=]' && carsArray[index1 + 1].make[index2] != '[=10=]'; index2++)
{
makeTemp = carsArray[index1].make[index2];
carsArray[index1].make[index2] = carsArray[index1 + 1].make[index2];
carsArray[index1 + 1].make[index2] = makeTemp;
}
for (index3 = 0; carsArray[index1].model[index3] != '[=10=]' && carsArray[index1 + 1].model[index3] != '[=10=]'; index3++)
{
modelTemp = carsArray[index1].model[index3];
carsArray[index1].model[index3] = carsArray[index1 + 1].model[index3];
carsArray[index1 + 1].model[index3] = modelTemp;
}
priceTemp = carsArray[index1].price;
carsArray[index1].price = carsArray[index1 + 1].price;
carsArray[index1 + 1].price = priceTemp;
availTemp = carsArray[index1].available;
carsArray[index1].available = carsArray[index1 + 1].available;
carsArray[index1 + 1].available = availTemp;
swap += 1;
}
}
}
while (swap != 0);
cout << "SORTED!" << endl;
return;
}
输入:
0 2014 Toyota Tacoma 5.12 0
1 2015 Ford Fusion .89 1
2 2009 Dodge Neon .25 0
3 2015 Ford F150 2.83 1
4 2016 Subaru Outback .27 1
输出:(排序后)
0 999984304 �yota Ծ0#on $-1.84172e+33 32566
1 2009 Dodg Neonma .25 0
2 2016 Subae Outb .27 1
3 2015 Ford Fusi .89 1
4 2015 Fordru F150U�� 2.83 1
如果您的数组中有 5 个元素,并且您使用 index1 + 1
作为循环内的索引,那么您只希望 index1
达到 4。如所写,您允许index1
上升到 5,这意味着 index1 + 1
是 6,这大概超出了数组的末尾。
更好的是,您可能希望向您的函数添加一个额外的参数,即数组中元素的数量,而不是在您的排序函数中间有一个神秘(且不正确)的 5。