[英]Sorting an array of pointers to a struct on the basis of a struct member - best possible option?
我有以下结构:
typedef struct details clientDetails;
struct details
{
int socket;
char* port;
char* IP;
char* hostName;
int msgSentCount;
int msgRecvCount;
char* status;
char* bufferMsg;
char* blockedUser[4];
int blockedCount;
};
我有以下指向该结构的指针数组:
clientDetails* allClients[4];
使数组按结构的port
号排序的最佳方法是什么?
所需的实现如下:
sortByPort(allClients)
->将引用传递给数组并对其进行排序,这样,如果在此函数调用后打印allClients
的值, allClients
按port
号对其进行排序。
问题基于哪种排序算法最适合您的应用程序。 它可以是快速排序,合并排序或简单选择排序。 作为您的示例,数组的长度仅为4,我用选择排序制作了一个示例:
clientDetails * sortByPort(clientDetails *pClients, size_t len)
{
size_t i, k;
for (i = 0; i < len - 1; ++i) {
size_t k = i;
for (j = i + 1; j < len; ++j) {
if (atoi(pClients[j].port) < atoi(pClients[k].port)) {
k = j;
}
}
clientDetails *tmp = pClients[k];
pClients[k] = pClients[i];
pClients[i] = tmp;
}
return pClients;
}
如果端口大于int
值,则可以使用strtol
代替atoi
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.