Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序编号未正确排序数组_C_Arrays_Sorting - Fatal编程技术网

C程序编号未正确排序数组

C程序编号未正确排序数组,c,arrays,sorting,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 (

我有一个产品的结构数组,我试图按名称、类型、价格和数量进行排序。名称和类型有效,但价格和数量无效。 我的代码是:

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;
    }
}
else if(sort==sortByPrice)
{
for(int i=0;i列表[x]。价格)
{
小位置=x;
}
}
temp=列表[i];
列表[i]=列表[smallPosition];
列表[小位置]=温度;
}
}
else if(排序==排序数量)
{
for(int i=0;i列表[x].数量)
{
小位置=x;
}
}
temp=列表[i];
列表[i]=列表[smallPosition];
列表[小位置]=温度;
}
}

有人能告诉我为什么不工作/如何修复吗?

您应该将交换代码移到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;
        }
    }

}
for(int i=0;i列表[x]。价格)
{
temp=列表[i];
列表[i]=列表[X];
列表[X]=温度;
}
}
}
根据的注释,您应该动态比较
smallPosition
处的值,而不是
i
,以便它始终指向剩余的最小项:

    int smallPosition = i;
    for (int x = i + 1; x < numProducts; x++)
    {
        if (list[smallPosition].price > list[x].price)
        {
            smallPosition = x;
        }
    }
int smallPosition=i;
对于(int x=i+1;x列表[x]。价格)
{
小位置=x;
}
}
只需使用气泡排序即可


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

您似乎假设内部“x”循环找到最小的剩余项。它没有——它会找到恰好比第i个项目小,但可能比其他项目大的最高索引项目。
if(list[i].price>list[x].price)
应该是
if(list[x].price
。这应该足够了。否则,如果您对选择排序实现不感兴趣,下面的答案是冒泡排序实现,应该可以工作。即使这很难工作,但很高兴指出这是一个冒泡排序实现,OP最初的尝试是创建一个SelectionSort实现。还有一个小小的改进:在交换元素之前,检查
if(smallPosition!=i)
,然后交换if true。这将阻止在数组已排序的情况下执行交换操作。我对这个答案投反对票有两个原因:1)这正是@bruceg answers所做的。2) 另外,OPs最初的想法是实现SelectionSort,正如我在bruceg answer上评论的那样。即使很难,它们都是最坏情况下的O(n²)算法,当涉及到平均情况时,SelectionSort比Bubble要好得多(阅读:)