【发布时间】:2017-01-29 01:32:52
【问题描述】:
我有这个结构:
typedef struct data{
char name[100], pseudo[100];
int num0, num1, num2, num3, num4;
long int lnum0, lnum1, lnum2, lnum3, lnum4;
double dnum0, dnum1;
}data;
data list[50]
我创建了一个此结构的数组,并使用快速排序算法对它们进行排序。 为此,我必须使用此函数交换元素:
void swap(data list[], i, j){
data tmp;
tmp.num1 = list[i].num1
list[i].num1 = list[j].num1
list[j].num1 =tmp.num1
//using memmove to avoid overlaping from the strcpy function
memmove(temp.name,list[i].name,strlen(list[i].name));
memmove(list[i].name,list[j].name,strlen(list[j].num1));
memmove(list[j].name,tmp.name,strlen(tmp.name));
}
我的结构中有 16 个元素,我必须重复此函数 16 次才能将它们全部交换。 我的问题是:是否有另一种更简单、更快或更好的方法来进行,或者我们可以优化这个功能?
【问题讨论】:
-
也许创建一个指向这些结构的指针数组并交换指针而不是实际的结构?
-
你的
memmove代码没有意义。 -
如果你必须交换实际结构而不是使用指针,
data tmp; tmp = list[ i ]; list[ i ] = list[ j ]; list[ j ] = tmp;肯定是更简单的代码。而且它也可能会快很多。 -
要交换整个结构,需要使用
memmove()或memcpy()之类的东西。在整个结构上。注意:@AndrewHenle,仅使用结构实例的名称不会复制整个结构 -
@user3629249:使用结构赋值来复制结构,如 AndrewHenle 所示,对于浅拷贝来说是正确的,这就是这里所需要的。