void _Qsort(uint32_t* alut, uint32_t* clut, int l, int r) { if (l < r) { int pI = _Partition(alut, clut, l, r); _Qsort(alut, clut, l, pI - 1); _Qsort(alut, clut, pI + 1, r); } }
void _Qsort(FX_DWORD* alut, FX_DWORD* clut, int l, int r) { if (l < r) { int pI = _Partition(alut, clut, l, r); _Qsort(alut, clut, l, pI - 1); _Qsort(alut, clut, pI + 1, r); } }
//Finds the positionth smallest element in the list static int Selection(std::vector<int> list, int position) { int first = 0; int last = list.size(); int j; while (true) { j = _Partition(list, first, last); //Return positionth smallest if (position == j) break; if (position < j) //Search left sublist last = j - 1; else //Search right sublist first = j + 1; } return list[j]; }
//Paritions a list static void Partition(std::vector<int> &list) { _Partition(list, 0, list.size()); }