Алгоритмы и структуры данных на С++. Аксёнова Е.А - 70 стр.

UptoLike

70 Глава 5. Сортировка
{
stack <int> s(50);
push2(s,l,r);
while(!s.empty())
{
l=s.pop();
r=s.pop();
if (r<=l) continue;
int i=partition(a,l,r);
if(i-1>r-i)
{
push2(s,l,i-1);
push2(s,i+1,r);
}
else
{
push2(s,i+1,r);
push2(s,l,i-1);
}
}
}
template <class item> int partition(item *a,int l,int r)
{
int i=l-1, j=r;
item v=a[r], c;
for(;;)
{
while(a[++i]<v);
while(v<a[--j])
if(j==l) break;
if(i>=j) break;
70                                        Глава 5. Сортировка


{
     stack  s(50);
     push2(s,l,r);

     while(!s.empty())
      {
          l=s.pop();
          r=s.pop();

         if (r<=l)   continue;

         int i=partition(a,l,r);

         if(i-1>r-i)
           {
               push2(s,l,i-1);
               push2(s,i+1,r);
           }

         else
           {
                push2(s,i+1,r);
                push2(s,l,i-1);
          }
     }
}

template  int partition(item *a,int l,int r)
{
    int i=l-1, j=r;
    item v=a[r], c;

     for(;;)
      {
          while(a[++i]=j) break;