2017-10-11 41 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值。