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要好得多(阅读:)