[BACK]Return to qsort.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / stdlib

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/lib/libc/stdlib/qsort.c between version 1.6 and 1.7

version 1.6, 1996/12/19 07:56:33 version 1.7, 1997/06/19 07:41:33
Line 35 
Line 35 
   
 #if defined(LIBC_SCCS) && !defined(lint)  #if defined(LIBC_SCCS) && !defined(lint)
 #if 0  #if 0
 static char sccsid[] = "from: @(#)qsort.c       8.1 (Berkeley) 6/4/93";  static char sccsid[] = "@(#)qsort.c     8.1 (Berkeley) 6/4/93";
 #else  #else
 static char *rcsid = "$NetBSD$";  static char *rcsid = "$NetBSD$";
 #endif  #endif
Line 71  swapfunc(a, b, n, swaptype)
Line 71  swapfunc(a, b, n, swaptype)
         char *a, *b;          char *a, *b;
         int n, swaptype;          int n, swaptype;
 {  {
         if(swaptype <= 1)          if (swaptype <= 1)
                 swapcode(long, a, b, n)                  swapcode(long, a, b, n)
         else          else
                 swapcode(char, a, b, n)                  swapcode(char, a, b, n)
Line 109  qsort(a, n, es, cmp)
Line 109  qsort(a, n, es, cmp)
 loop:   SWAPINIT(a, es);  loop:   SWAPINIT(a, es);
         swap_cnt = 0;          swap_cnt = 0;
         if (n < 7) {          if (n < 7) {
                 for (pm = a + es; pm < (char *) a + n * es; pm += es)                  for (pm = (char *) a + es; pm < (char *) a + n * es; pm += es)
                         for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;                          for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
                              pl -= es)                               pl -= es)
                                 swap(pl, pl - es);                                  swap(pl, pl - es);
                 return;                  return;
         }          }
         pm = a + (n / 2) * es;          pm = (char *) a + (n / 2) * es;
         if (n > 7) {          if (n > 7) {
                 pl = a;                  pl = (char *) a;
                 pn = a + (n - 1) * es;                  pn = (char *) a + (n - 1) * es;
                 if (n > 40) {                  if (n > 40) {
                         d = (n / 8) * es;                          d = (n / 8) * es;
                         pl = med3(pl, pl + d, pl + 2 * d, cmp);                          pl = med3(pl, pl + d, pl + 2 * d, cmp);
Line 128  loop: SWAPINIT(a, es);
Line 128  loop: SWAPINIT(a, es);
                 pm = med3(pl, pm, pn, cmp);                  pm = med3(pl, pm, pn, cmp);
         }          }
         swap(a, pm);          swap(a, pm);
         pa = pb = a + es;          pa = pb = (char *) a + es;
   
         pc = pd = a + (n - 1) * es;          pc = pd = (char *) a + (n - 1) * es;
         for (;;) {          for (;;) {
                 while (pb <= pc && (r = cmp(pb, a)) <= 0) {                  while (pb <= pc && (r = cmp(pb, a)) <= 0) {
                         if (r == 0) {                          if (r == 0) {
Line 156  loop: SWAPINIT(a, es);
Line 156  loop: SWAPINIT(a, es);
                 pc -= es;                  pc -= es;
         }          }
         if (swap_cnt == 0) {  /* Switch to insertion sort */          if (swap_cnt == 0) {  /* Switch to insertion sort */
                 for (pm = a + es; pm < (char *) a + n * es; pm += es)                  for (pm = (char *) a + es; pm < (char *) a + n * es; pm += es)
                         for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;                          for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
                              pl -= es)                               pl -= es)
                                 swap(pl, pl - es);                                  swap(pl, pl - es);
                 return;                  return;
         }          }
   
         pn = a + n * es;          pn = (char *) a + n * es;
         r = min(pa - (char *)a, pb - pa);          r = min(pa - (char *) a, pb - pa);
         vecswap(a, pb - r, r);          vecswap(a, pb - r, r);
         r = min(pd - pc, pn - pd - es);          r = min(pd - pc, pn - pd - es);
         vecswap(pb, pn - r, r);          vecswap(pb, pn - r, r);

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

CVSweb <webmaster@jp.NetBSD.org>