C程序编号没有正确排序数组

时间:2018-04-04 00:17:40

标签: c arrays sorting

我有一系列产品结构,我试图按名称,类型,价格和数量进行排序。名称和类型工作,但价格和数量不起作用。 我的代码是:

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;
    }
}

任何人都可以告诉我它为什么不起作用/如何解决它?

3 个答案:

答案 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)

只需使用冒泡排序。

在冒泡排序中交换当前值的值大于下一个值,如果执行此操作直到到达数组末尾,则数组将被排序。