使用带结构的指针C进行选择排序

时间:2014-06-14 15:39:45

标签: c sorting struct selection

我遗漏了main,但基本上这应该排序8个元素但是当我编译它时,它说:

prelab3.c: In function ‘sort’:
prelab3.c:77: error: invalid operands to binary > (have ‘DynamicArray’ and ‘DynamicArray’)

并且我不确定为什么,你能不能使用指针比较结构中的东西吗?

以下代码:

    typedef struct Array_
        {
            int data;
    }DynamicArray;


    void sort(DynamicArray *v, unsigned int size)
    {
        int i, j;
        int min;
        DynamicArray temp;
        for (i=0; i<size-1; i++)
        {
            min = i;
            for(j=i+1; j<size; j++)
            {
                if(*(v+i) > *(v+j))
                {
                    min = j;
                }
            }
            if(min != i)
            {
                temp = *v;
                *v = *(v+min);
                *(v+min) = temp;
            }
        }
    }

2 个答案:

答案 0 :(得分:2)

比较结构是没有意义的,但你可以比较它们内部的整数。试试这个:

(v+i)->data > (v+j)->data

答案 1 :(得分:0)

正如@David所说,你不能比较结构。你的算法也有一些错误:

  • j循环用于查找[i,size]范围内的最小项目,因此您的比较必须与目前为止的最小值相对应:

    (v+min)->data > (v+j)->data
    

    我建议你使用数组符号,我认为更清楚:

    v[min].data > v[j].data
    
  • 最后一部分(在min!= i比较之后)用于交换min和i位置之间的值,因此您的代码应如下所示:

    temp = v[i];
    v[i] = v[min];
    v[min] = temp;
    

最后,请记住结构分配并不总是有效,对于比您更复杂的结构,您可能需要使用字段分配或memcpy()。