使用指向结构的指针实现冒泡排序

时间:2017-09-11 03:29:04

标签: c pointers structure bubble-sort

结构是

   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;

2 个答案:

答案 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;
}