虽然CPtrList没有排序算法,但是我们可以通过简单的语句进行排序
void CServerList::Sort()
{
EnterCriticalSection(&criticalSection);
CPtrList sortList;
CServer* prev = NULL;
CServer* p = NULL;
POSITION Pos,prevPos,sPos = NULL;
while(List.GetCount())
{
Pos = List.GetHeadPosition();
if(Pos)
{
sPos = Pos;
prev = (CServer*)List.GetNext(Pos);
}
for(; (prevPos = Pos) !=NULL; )
{
p = (CServer*)List.GetNext(Pos);
if(prev->GetLoads() < p->GetLoads())
{
prev = p;
sPos = prevPos;
}
}
if ( sPos != NULL ) List.RemoveAt(sPos);
if ( prev != NULL ) sortList.AddHead(prev);
}
Pos = sortList.GetHeadPosition();
while(Pos != NULL)
{
p = (CServer*)sortList.GetNext(Pos);
List.AddTail(p);
}
sortList.RemoveAll();
LeaveCriticalSection(&criticalSection);
}