Sorting a linked list
I have a array of 8 NPCs sructers. Each is linked to the next NPC and to the last NPC by a int. But i am having truble with my sorting. I wanted to sort them by there y values, in ascending order. But it just will not work. here is my code for sorting:
struct NPCS {
int nextNpc,
lastNpc;
RECT npcDestination; // location on the map
}
struct NPC {
int numNPCs; // this equals 8
NPCS npcs[8];
};
NPC npc;
int snlTemp = -1; // SortNpcListTemp
// Initialize them
for (int outer=0;outer<(npc.numNPCs-1);outer++)
{
for (int inner=outer;innernpc.npcs[inner].npcDestination.top)
{
// Update the lastNpc to point to the other Npc
if (npc.npcs[outer].lastNpc!=-1)
{
npc.npcs[npc.npcs[outer].lastNpc].nextNpc = inner;
}
if (npc.npcs[inner].lastNpc!=-1)
{
npc.npcs[npc.npcs[inner].lastNpc].nextNpc = outer;
}
// Switch the lastNpc
snlTemp = npc.npcs[inner].lastNpc;
npc.npcs[inner].lastNpc = npc.npcs[outer].lastNpc;
npc.npcs[outer].lastNpc = snlTemp;
// Update the nextNpc to point to the other Npc
if (npc.npcs[outer].nextNpc!=-1)
{
npc.npcs[npc.npcs[outer].nextNpc].lastNpc = inner;
}
if (npc.npcs[inner].nextNpc!=-1)
{
npc.npcs[npc.npcs[inner].nextNpc].lastNpc = outer;
}
// Switch the nextNpc
snlTemp = npc.npcs[inner].nextNpc;
npc.npcs[inner].nextNpc = npc.npcs[outer].nextNpc;
npc.npcs[outer].nextNpc = snlTemp;
}
}
}
Well i hope that this gives the general idea. Any way here are my 8 NPCs and there values, npcDestination.top is there y value:
npc.npcs[0].npcDestination.top = 20
npc.npcs[1].npcDestination.top = 20
npc.npcs[2].npcDestination.top = 750
npc.npcs[3].npcDestination.top = 500
npc.npcs[4].npcDestination.top = 500
npc.npcs[5].npcDestination.top = 70
npc.npcs[6].npcDestination.top = 20
npc.npcs[7].npcDestination.top = 900
That is there y values, now this is how my code sorts them:
npcs[0]
npcs[1]
npcs[4]
npcs[5]
npcs[6]
npcs[3]
npcs[2]
npcs[7]
When the correct sort is:
npcs[0]
npcs[1]
npcs[6]
npcs[3]
npcs[4]
npcs[5]
npcs[2]
npcs[7]
Only the middle 4 are wrong. I can''t figure our why, can anyone help???
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement