已经知道结构体,现在想写的是
#include<math.h>
struct bian
{
int d1;
int d2;
double j;
double s;
};
bian dianji[128];
q=50;
for (i = 0; i < q; i++)
{
for (k = 0; k < q - i -1; k++)
{
if (dianji[k].j > dianji[k + 1].j)
{
temp[0] = dianji[k];
dianji[k] = dianji[k + 1];
dianji[k + 1] = temp[0];
if (dianji[k].j == dianji[k + 1].j)//从这一段开始不太懂,当s更大的时候,删除s更小的结构体,后面的数据向前移动
{
while (dianji[k].s < dianji[k + 1].s)
{
dianji[k]
}
}
}
}
}
你的具体要求是什么呢,把题目要求说清楚。
而且,你这个代码有问题。
双层for循环是冒泡排序的逻辑,从小到大排序,但是,if (dianji[k].j == dianji[k + 1].j)这个if语句,放在了 if (dianji[k].j > dianji[k + 1].j)这个if语句里面,if (dianji[k].j == dianji[k + 1].j)语句永远不会执行的。
给你修改了一下,如下:
#include<math.h>
struct bian
{
int d1;
int d2;
double j;
double s;
};
bian dianji[128];
q = 50;
//冒泡排序,元素按照j从小到大排序
for (i = 0; i < q; i++)
{
for (k = 0; k < q - i - 1; k++)
{
if (dianji[k].j > dianji[k + 1].j)
{
temp[0] = dianji[k];
dianji[k] = dianji[k + 1];
dianji[k + 1] = temp[0];
}
}
}
//排序完后,如果相邻元素的 j 相同,就删除s更小的结构体元素
for (i = 1; i < q; i++)
{
if (dianji[i].j == dianji[k - 1].j)//如果i元素的j和i+1元素的j相等,就删除s较小的
{
if (dianji[i - 1].s < dianji[i].j) //i-1元素的s比i元素的s小,删除i-1元素,后面的元素前移
{
for (j = i - 1; j < q - 1; j++)
dianji[j] = dianji[j + 1];
q--;
i--;
}
else //i-1元素的s比i元素的s大(或者相等),删除i元素,后面的元素前移
{
for (j = i; j < q - 1; j++)
dianji[j] = dianji[j + 1];
q--;
i--;
}
}
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!