我遗漏了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;
}
}
}
答案 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()。