Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Ianos Gnatiuc                        2:469/303.55   09 Oct 2002  19:33:15
 To : Anatoly Svishev
 Subject : qsort
 -------------------------------------------------------------------------------- 
 
 
 04 Oct 02 23:49, you wrote to All:
 #define CUTOFF 8
 #define SWAP(A, B) tmp = A; A = B; B = tmp;
 
 int lostk[30], histk[30];
 int stkptr;
 
 void iqsort(int *base, unsigned num)
 {
     int tmp;
     int lo = 0, hi = num-1, mid;
     int loguy, higuy;
     unsigned size;
 
     stkptr = 0;
 
 recurse:
 
     size = hi - lo + 1;
 
     if (size <= CUTOFF)
     {
         int p, max;
 
         while (hi > lo)
         {
             max = base[lo];
             for (p = lo+1; p <= hi; p++)
             {
                 if (base[p] > max) max = base[p];
             }
 
             SWAP(max, base[hi]); hi--;
         }
     }
     else
     {
         mid = lo + size/2;
         SWAP(base[mid], base[lo]); loguy = lo; higuy = hi+1;
 
         for (;;)
         {
             do loguy++; while ((loguy <= hi) && (base[loguy] <= base[lo]));
             do higuy--; while ((higuy >  lo) && (base[higuy] >= base[lo]));
             if (higuy < loguy) break;
             SWAP(base[loguy], base[higuy]);
         }
 
         SWAP(base[lo], base[higuy]);
 
         if ((higuy - lo - 1) >= (hi - loguy))
         {
             if ((lo+1) < higuy)
             {
                 lostk[stkptr] = lo; histk[stkptr] = higuy-1; stkptr++;
             }
 
             if (loguy < hi) { lo = loguy; goto recurse; }
         }
         else
         {
             if (loguy < hi)
             {
                 lostk[stkptr] = loguy; histk[stkptr] = hi; stkptr++;
             }
 
             if ((lo + 1) < higuy) { hi = higuy-1; goto recurse; }
         }
     }
 
     --stkptr;
     if (stkptr >= 0)
     {
         lo = lostk[stkptr]; hi = histk[stkptr]; goto recurse;
     }
 
     return;
 }
 Ianos
 
 ... [WinAmp is not installed]  EMAIL: ssianky[at][hotmail | yahoo].com
 --- GoldED+/W32 1.1.4.7
  * Origin: SS Ianky - (373-2) 534966 (2:469/303.55)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 qsort   Anatoly Svishev   04 Oct 2002 23:49:41 
 qsort   Max Alekseyev   04 Oct 2002 20:41:04 
 RE: qsort   Anatoly Svishev   05 Oct 2002 23:08:06 
 qsort   Max Alekseyev   07 Oct 2002 11:47:32 
 RE: qsort   Anatoly Svishev   08 Oct 2002 23:20:25 
 qsort   Max Alekseyev   08 Oct 2002 20:12:28 
 qsort   Ianos Gnatiuc   08 Oct 2002 23:59:20 
 qsort   Ianos Gnatiuc   05 Oct 2002 17:21:13 
 RE: qsort   Anatoly Svishev   07 Oct 2002 00:12:44 
 qsort   Ianos Gnatiuc   07 Oct 2002 15:27:25 
 Re: qsort   Alexander Chislov   08 Oct 2002 19:12:52 
 qsort   Ianos Gnatiuc   09 Oct 2002 19:33:15 
Архивное /ru.algorithms/33643da45e13.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional