#include<iostream>
#include<time.h>
using namespace std;
int GetPos(int* piScr,int iStartIndex,int iEndIndex)
{
int iPos = iStartIndex;
int iLeftIndex = iStartIndex + 1;
int iRightIndex = iEndIndex;
int iPosValue = piScr[iPos];
int iTemp = 0;
while(true)
{
while(piScr[iLeftIndex] < iPosValue && iLeftIndex <= iEndIndex)
{
iLeftIndex++;
}
while(piScr[iRightIndex] > iPosValue)
{
iRightIndex--;
}
if(iRightIndex < iLeftIndex)
{
break;
}
else
{
iTemp = piScr[iLeftIndex];
piScr[iLeftIndex] = piScr[iRightIndex];
piScr[iRightIndex] = iTemp;
}
}
iTemp = piScr[iRightIndex];
piScr[iRightIndex] = iPosValue;
piScr[iPos] = iTemp;
return iRightIndex;
}
int GetPosRandom(int* piScr,int iStartIndex ,int iEndIndex)
{
//generate a number between [iStartIndex,iEndIndex];
srand(time(NULL)); // seed the random-number generator with the current time
int iRand =(int) ((double)rand()/(double)RAND_MAX )* iEndIndex + iStartIndex;
int iTemp = 0;
iTemp = piScr[iStartIndex];
piScr[iStartIndex] = piScr[iRand];
piScr[iRand] = iTemp;
return GetPos(piScr,iStartIndex,iEndIndex);
}
void RandQSort(int* ipScr,int iStartIndex,int iEndIndex)
{
if(iStartIndex < iEndIndex)
{
int iPos = GetPosRandom(ipScr,iStartIndex,iEndIndex);
RandQSort(ipScr,iStartIndex,iPos -1 );
RandQSort(ipScr,iPos + 1, iEndIndex);
}
}
int main()
{
int aiTest[100];
for(int i =0 ;i< 100 ; i++)
{
aiTest[i] = 100 -i;
}
RandQSort(aiTest,0,99);
for(int i =0 ;i< 100;i++)
{
cout<<aiTest[i]<<endl;
}
system("pause");
return 0;
}
随机排序
最新推荐文章于 2022-03-19 13:59:46 发布