结构体元素排序

struct commdity_comm
{
int num;
char name[20];
double price;
double count;
double total;
}comm[50];
这个结构假如现在有3条记录,要以num进行排序,我用冒泡排序方法怎么都显示不对呢,代码也没有报错,有高手能指点下这个思路怎样的么,我自己的思路就是比如comm[0].num>comm[1].num就把comm[1].num这条记录的所有元素值对应的给到comm[0].num这条去,把comm[0].num的值给过来,但是输出结果不对

第1个回答  2012-08-03
需要定义一个中间变量,要不然你把comm[1].num这条记录的所有元素值对应的给到comm[0].num这条去之后,comm[0].num的值就被覆盖了,你在想把comm[0].num的值给过来,就不可能了,因为comm[0].num里的值已经是comm[1].num,原来的质疑被覆盖。
所以这样写一下:
commdity_comm temp;
if(comm[0].num>comm[1].num)
{
temp=comm[0];
comm[0]=comm[1];
comm[1]=temp;
}
第2个回答  2012-08-03
要定义一个中间变量,要不然你把comm[1].num这条记录的所有元素值对应的给到comm[0].num这条去之后,comm[0].num的值就被覆盖了,你在想把comm[0].num的值给过来,就不可能了,因为comm[0].num里的值已经是comm[1].num,原来的质疑被覆盖。
所以这样
第3个回答  2012-08-03
可以先在结构体中加一个operator=重载运算符函数,这样就可以直接用对象=号赋值.

下面是假设有三个记录的冒泡排序程序代码:
for(int i=0; i<2; i++)
{
for(int j=0; j<2-i; j++)
{
if(comm[j].num>comm[j+1].num)
{
temp = comm[j];
comm[j]=comm[j+1];
comm[j+1]=temp;
}
}
}

楼主看能否帮你解决问题?,请采纳!追问

li[0].no=comm[j].num;
comm[j].num=comm[i].num;
comm[i].num=li[0].no;

strcpy(li[0].a,comm[j].name);
strcpy(comm[j].name,comm[i].name);
strcpy(comm[i].name,li[0].a);

非常谢谢,我再问下,如果是按这种方式能不能行通的

追答

请问,li是什么变量?你可以直接定义一个中间变量
而且第二个comm[j].num=comm[i].num;写的不对
如下写法
commdity_comm temp;

temp.num=comm[j].num;
comm[j].num=comm[j+1].num;
comm[j+1].num=temp.num;
接下来的所有变量都要交换

本回答被提问者采纳
第4个回答  2012-08-03
需要定义一个临时的变量中转下
commdity_comm tmp;
tmp = comm[0];
comm[0] = comm[1];
comm[1] = tmp;追问

这个定义要报错呢

相似回答