2017-10-11 26 views
0

我有以下结构:基于结构成员对指向结构的指针数组进行排序 - 最好的选择?

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值,我将有它由port排序数。

+4

你可以看看['qsort()'](https://www.tutorialspoint.com/c_standard_library/c_function_qsort.htm)函数。 –

+0

您能否列出您到目前为止所调查的选项?还有什么阻止你选择一个? – CristiFati

+0

我刚刚实现了基于端口号的气泡排序,通过交换数组的单元(整个结构体)。它似乎工作。但我很想找出更好的选择。 – Manic

回答

0

问题是基于哪种排序算法最适合您的应用程序。它可以是快速排序,合并排序或简单的选择排序。 作为你的榜样数组的长度只有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; 
} 

可以使用strtol代替atoi该端口是否比int值。