【发布时间】:2017-04-18 19:48:32
【问题描述】:
我正在开发一个程序的一部分,该程序按多个标准对数组中的帖子进行排序。在程序到达最后一段代码之前,帖子的排序很好。
此代码块按应有的方式对帖子进行排序:
for (i = 0; i < 11; i++)
for (j = i + 1; j < 12; j++)
if (serie[j].poang == serie[i].poang)
if ((serie[j].gjorda - serie[j].inslappta) < (serie[i].gjorda - serie[i].inslappta))
{
temp.poang = serie[i].poang;
serie[i].poang = serie[j].poang;
serie[j].poang = temp.poang;
temp.gjorda = serie[i].gjorda;
serie[i].gjorda = serie[j].gjorda;
serie[j].gjorda = temp.gjorda;
temp.inslappta = serie[i].inslappta;
serie[i].inslappta = serie[j].inslappta;
serie[j].inslappta = temp.inslappta;
strcpy(temp.namn, serie[i].namn);
strcpy(serie[i].namn, serie[j].namn);
strcpy(serie[j].namn, temp.namn);
}
虽然这似乎根本不影响排序(我什至尝试在下面代码中的最后一个“if”语句中反转“
for (i = 0; i < 11; i++)
for (j = i + 1; j < 12; j++)
if (serie[j].poang == serie[i].poang)
if ((serie[j].gjorda - serie[j].inslappta) < (serie[i].gjorda - serie[i].inslappta))
if(serie[j].gjorda < serie[i].gjorda)
{
temp.poang = serie[i].poang;
serie[i].poang = serie[j].poang;
serie[j].poang = temp.poang;
temp.gjorda = serie[i].gjorda;
serie[i].gjorda = serie[j].gjorda;
serie[j].gjorda = temp.gjorda;
temp.inslappta = serie[i].inslappta;
serie[i].inslappta = serie[j].inslappta;
serie[j].inslappta = temp.inslappta;
strcpy(temp.namn, serie[i].namn);
strcpy(serie[i].namn, serie[j].namn);
strcpy(serie[j].namn, temp.namn);
}
【问题讨论】:
-
像
serie[j].gjorda - serie[j].inslappta和serie[i].gjorda - serie[i].inslappta这样的减法是否会溢出? -
您应该显示结构定义。
namn成员的定义方式可能很重要。 If 可能是一个数组 (char namn[30];) 或一个指针 (char *namn;),或者您可能有创造力并做了其他事情。有了指针,就不用担心存储空间了;使用你没有的数组。你应该看看你是否也可以使用结构赋值。 -
交换很复杂。建议
temp = serie[i]; serie[i] = serie[j]; serie[j] = temp;。 -
您正在应用不同的排序标准,因此结果可能会有所不同。领先的平等条件是不寻常的。这意味着如果比较记录的
poang元素不同,则这些记录永远不需要交换;它们已经按顺序排列。也许你应该展示一些样本数据,以及实际和预期的结果?请阅读有关如何创建 MCVE (minimal reproducible example) 的信息 — 虽然您已最小化代码,但您尚未提供完整示例,也未显示数据。 -
为什么不用内置的
qsort()函数?
标签: c sorting for-loop if-statement