天天看点

CPtrList排序

虽然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);

}