为什么结构数组的元素不交换?我正在尝试排序一系列学生结构。基于卷号

时间:2017-04-28 11:43:55

标签: c structure quicksort

从main()我正在调用函数,其中record是struct.in swap()函数的数组我看到地址正在交换但是在分区中它显示的是原始地址。

quick_sort(记录,0,MAXNO-1);

void quick_sort(struct student arr[],int left,int right)
{
        int pi;
        if(left<right)
        {
                pi=partation(arr,left,right);
                quick_sort(arr,left,pi-1);
                quick_sort(arr,pi+1,right);
        }
 }
int partation(struct student str[],int low,int high)
{
        int i,j;
        struct student pivot=str[high];
        i=low-1;
        for(j=0;j<high;j++)
        {
                if(str[j].rollno < pivot.rollno)
                {
                        i++;
                        swap(&str[i],&str[j]);
                }
        }
        swap(&str[i+1],&str[j]);
        return i+1;
}
void swap(struct student *a,struct student *b)
{
        struct student *temp;
        temp=a;
        a=b;
        b=temp;
}

2 个答案:

答案 0 :(得分:1)

您在本地交换swap方法中的指针:它在函数外部什么都不做。

你必须取消引用指针才能生效,例如:

void swap(struct student *a,struct student *b)
{
        struct student temp;
        temp=*a;
        *a=*b;
        *b=temp;
}

答案 1 :(得分:1)

这是因为你在交换指针,而不是结构。

您可以像交换基元一样交换struct,例如int。这就是你用指针交换传递给你的两个int的方法:

void swap(int *a, int *b) {
    int tmp = *a;
    *a = *b;
    *b = temp;
}

struct的代码几乎相同:

void swap(struct student *a, struct student *b) {
    struct student temp = *a;
    *a = *b;
    *b = temp;
}