结构是
struct student
{
char name[10];
int roll;
int percent;
};
struct student s[5];
struct student *p;
以上声明为Global。这是我的冒泡排序功能。
void sort(int n)
{
int i,j,k;
struct student temp;
for(i=0;i<=(n-2);i++)
{
for(j=0;j<(n-i-1);j++){
if((p+j)->percent>(p+j+1)->percent){
//Define the temp variable of Structure type
temp=*(p+j);//Interchange s[j] and s[j+1]
*(p+j)=*(p+j+1);
*(p+j)=temp;
}
}
}
我想避免使用点运算符来访问结构的元素 用于交换的临时变量已声明为结构类型。 此冒泡排序功能不起作用。这些是我认为搞砸的行。请指出错误。
if((p+j)->percent>(p+j+1)->percent){
temp=*(p+j);//Interchange s[j] and s[j+1]
*(p+j)=*(p+j+1);
*(p+j)=temp;
答案 0 :(得分:1)
交换逻辑错误,首先你将temp设置为*(p + j),然后你将*(p + j)设置为*(p + j + 1)但是你犯了一个错误然后写上* (p + j)再次。我相信改变
*(p+j)=temp;
到
*(p+j+1)=temp;
应该解决它
答案 1 :(得分:1)
一个明显的问题是你的交换逻辑:
if((p+j)->percent>(p+j+1)->percent){
temp=*(p+j);//Interchange s[j] and s[j+1]
*(p+j)=*(p+j+1);
*(p+j)=temp;
}
最终的赋值是错误的元素,并且只是颠倒了之前的赋值。将其更改为:
if((p+j)->percent>(p+j+1)->percent){
temp=*(p+j);//Interchange s[j] and s[j+1]
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}