void QuickSort1(int l, int u)
{
if(l >= u)
return;
int m = l;
for(int i = l+1; i <= u; ++i)
{
if(m_vec[i] < m_vec[l])
swap(++m, i); // 在++m处的值一定>=m_vec[l];
}
swap(l, m);
QuickSort1(l, m-1);
QuickSort1(m+1, u);
}
void QuickSort2(int l, int u)
{
if(l >= u)
return;
int t = m_vec[l];
int i = l;
int j = u+1;
while (1) {
do{ i++; }while(i <= u && m_vec[i] < t);
do{ j--; }while(m_vec[j] > t);
if( i > j)
break;
swap(i, j);
}
swap(l, j);
QuickSort2(l, j-1);
QuickSort2(j+1, u);
}
void QuickSort3(int l, int u)
{
if(l >= u)
return;
swap(l, random(l,u));
int t = m_vec[l];
int i = l;
int j = u+1;
while (1) {
do{ i++; }while(i <= u && m_vec[i] < t);
do{ j--; }while(m_vec[j] > t);
if( i > j)
break;
swap(i, j);
}
swap(l, j);
QuickSort2(l, j-1);
QuickSort2(j+1, u);
}
void swap(int n1, int n2)
{
int temp = m_vec[n1];
m_vec[n1] = m_vec[n2];
m_vec[n2] = temp;
}