我有一系列产品结构,我试图按名称,类型,价格和数量进行排序。名称和类型工作,但价格和数量不起作用。 我的代码是:
else if (sort == sortByPrice)
{
for (int i = 0; i < numProducts; i++)
{
int smallPosition = i;
for (int x = i + 1; x < numProducts; x++)
{
if (list[i].price > list[x].price)
{
smallPosition = x;
}
}
temp = list[i];
list[i] = list[smallPosition];
list[smallPosition] = temp;
}
}
else if (sort == sortByQty)
{
for (int i = 0; i < numProducts; i++)
{
int smallPosition = i;
for (int x = i + 1; x < numProducts; x++)
{
if (list[i].qty > list[x].qty)
{
smallPosition = x;
}
}
temp = list[i];
list[i] = list[smallPosition];
list[smallPosition] = temp;
}
}
任何人都可以告诉我它为什么不起作用/如何解决它?
答案 0 :(得分:3)
跟进Lee Daniel Crocker的评论,您应该动态地与smallPosition
而不是i
的值进行比较,以便它始终指向剩余的最小项:
int smallPosition = i;
for (int x = i + 1; x < numProducts; x++)
{
if (list[smallPosition].price > list[x].price)
{
smallPosition = x;
}
}
答案 1 :(得分:0)
您应该在if语句中移动交换代码:
for (int i = 0; i < numProducts; i++)
{
for (int x = i + 1; x < numProducts; x++)
{
if (list[i].price > list[x].price)
{
temp = list[i];
list[i] = list[X];
list[X] = temp;
}
}
}
答案 2 :(得分:0)
只需使用冒泡排序。
在冒泡排序中交换当前值的值大于下一个值,如果执行此操作直到到达数组末尾,则数组将被排序。