-int QuickSortPartition(RainbowChainCP* pChain, int nLow, int nHigh)
-{
- int nRandomIndex = nLow + ((unsigned int)rand() * (RAND_MAX + 1) + (unsigned int)rand()) % (nHigh - nLow + 1);
- RainbowChainCP TempChain;
- TempChain = pChain[nLow];
- pChain[nLow] = pChain[nRandomIndex];
- pChain[nRandomIndex] = TempChain;
-
- TempChain = pChain[nLow];
- uint64 nPivotKey = pChain[nLow].nIndexE;
- while (nLow < nHigh)
- {
- while (nLow < nHigh && pChain[nHigh].nIndexE >= nPivotKey)
- nHigh--;
- pChain[nLow] = pChain[nHigh];
- while (nLow < nHigh && pChain[nLow].nIndexE <= nPivotKey)
- nLow++;
- pChain[nHigh] = pChain[nLow];
- }
- pChain[nLow] = TempChain;
- return nLow;
-}
-
-void QuickSort(RainbowChainCP* pChain, int nLow, int nHigh)
-{
- if (nLow < nHigh)
- {
- int nPivotLoc = QuickSortPartition(pChain, nLow, nHigh);
- QuickSort(pChain, nLow, nPivotLoc - 1);
- QuickSort(pChain, nPivotLoc + 1, nHigh);
- }
-}
-