void PGE_Menu::sort() { if(_items.size()<=1) { autoOffset(); //Nothing to sort! return; } QStack<int> beg; QStack<int> end; PGE_Menuitem * piv; int i=0, L, R, swapv; beg.push_back(0); end.push_back(_items.size()); while (i>=0) { L=beg[i]; R=end[i]-1; if (L<R) { piv=_items[L]; while (L<R) { while ((namefileMoreThan(_items[R], piv)) && (L<R)) R--; if (L<R) _items[L++]=_items[R]; while ((namefileLessThan(_items[L], piv)) && (L<R)) L++; if (L<R) _items[R--]=_items[L]; } _items[L]=piv; beg.push_back(L+1); end.push_back(end[i]); end[i++]=(L); if((end[i]-beg[i]) > (end[i-1]-beg[i-1])) { swapv=beg[i]; beg[i]=beg[i-1]; beg[i-1]=swapv; swapv=end[i]; end[i]=end[i-1]; end[i-1]=swapv; } } else { i--; beg.pop_back(); end.pop_back(); } } autoOffset(); }
void PGE_LevelCamera::sortElements() { if(objects_to_render.size()<=1) return; //Nothing to sort! QStack<int> beg; QStack<int> end; PGE_Phys_Object* piv; int i=0, L, R, swapv; beg.push_back(0); end.push_back(objects_to_render.size()); while (i>=0) { L=beg[i]; R=end[i]-1; if (L<R) { piv=objects_to_render[L]; while (L<R) { while ((objects_to_render[R]->zIndex()>=piv->zIndex()) && (L<R)) R--; if (L<R) objects_to_render[L++]=objects_to_render[R]; while ((objects_to_render[L]->zIndex()<=piv->zIndex()) && (L<R)) L++; if (L<R) objects_to_render[R--]=objects_to_render[L]; } objects_to_render[L]=piv; beg.push_back(L+1); end.push_back(end[i]); end[i++]=(L); if((end[i]-beg[i]) > (end[i-1]-beg[i-1])) { swapv=beg[i]; beg[i]=beg[i-1]; beg[i-1]=swapv; swapv=end[i]; end[i]=end[i-1]; end[i-1]=swapv; } } else { i--; beg.pop_back(); end.pop_back(); } } }