我有一个结构体,其中包含3个整数,分别表示三角形的三条边的长度:
struct triangle{
int a; int b; int c;
};
typedef struct triangle tri;
首先,我需要读取要处理的三角形数量(n);然后,我会读取n个三角形的三条边,并按照从小到大的顺序排序。
接下来,我的想法是比较这些三角形的面积,如果前面的面积比后面的面积大,则交换相应的结构。最后,结构体(即三角形的三条边)的值将按照从小到大的顺序打印出来。
我卡在了如何交换这些结构上。目前为止,我已经完成了以下步骤:
void swap(tri *a, tri *b)
{
tri t;
t = *a;
*a = *b;
*b = t;
}
void sort_by_area(tri *tr, int n)
{
int sorted, storage[n];
for(int i = 0; i <= n-1; i++)
{
storage[i] = give_area(&tr[i]);
}
do
{
sorted = 1;
for(int i = 0; i < n-1; i++)
{
if(storage[i] > storage[i+1])
{
/*swap(tr[i].a, tr[i+1].a);
swap(tr[i]->b, tr[i+1]->b);
swap(tr[i]->c, tr[i+1]->c);*/
/*the commented section was my another attempt in which I would change the swap inputs to swap(int a, int b) or swap(int *a, int *b)*/
swap(&tr[i], &tr[i+1]);
sorted = 0;
}
}
}while(!sorted);
}
我确定把结构体放在这里是完全错误的。
如果需要更多信息,这是我的主函数:
int main()
{
int n;
scanf("%d\n", &n);
tri *tr = malloc(n*(sizeof(tri)));
for(int i = 0; i < n; i++){
scanf("%d %d %d", &tr[i].a, &tr[i].b, &tr[i].c);
}
sort_by_area(tr, n);
for(int i = 0; i < n; i++){
printf("\n%d %d %d", tr[i].a, tr[i].b, tr[i].c);
}
free(tr);
return 0;
}
经过我的调查,代码运行正确,我认为主要问题可能在于交换函数或者嵌套的for/if循环中运行的交换函数。
storage
会发生什么? - gsamaras