[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.19 and 1.20

version 1.19, 2009/01/30 23:38:44 version 1.20, 2009/06/01 06:37:40
Line 103  qsort(void *a, size_t n, size_t es,
Line 103  qsort(void *a, size_t n, size_t es,
 {  {
         char *pa, *pb, *pc, *pd, *pl, *pm, *pn;          char *pa, *pb, *pc, *pd, *pl, *pm, *pn;
         size_t d, r;          size_t d, r;
         int swaptype, swap_cnt, cmp_result;          int swaptype, cmp_result;
   
         _DIAGASSERT(a != NULL);          _DIAGASSERT(a != NULL);
         _DIAGASSERT(cmp != NULL);          _DIAGASSERT(cmp != NULL);
   
 loop:   SWAPINIT(a, es);  loop:   SWAPINIT(a, es);
         swap_cnt = 0;  
         if (n < 7) {          if (n < 7) {
                 for (pm = (char *) 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;
Line 136  loop: SWAPINIT(a, es);
Line 135  loop: SWAPINIT(a, es);
         for (;;) {          for (;;) {
                 while (pb <= pc && (cmp_result = cmp(pb, a)) <= 0) {                  while (pb <= pc && (cmp_result = cmp(pb, a)) <= 0) {
                         if (cmp_result == 0) {                          if (cmp_result == 0) {
                                 swap_cnt = 1;  
                                 swap(pa, pb);                                  swap(pa, pb);
                                 pa += es;                                  pa += es;
                         }                          }
Line 144  loop: SWAPINIT(a, es);
Line 142  loop: SWAPINIT(a, es);
                 }                  }
                 while (pb <= pc && (cmp_result = cmp(pc, a)) >= 0) {                  while (pb <= pc && (cmp_result = cmp(pc, a)) >= 0) {
                         if (cmp_result == 0) {                          if (cmp_result == 0) {
                                 swap_cnt = 1;  
                                 swap(pc, pd);                                  swap(pc, pd);
                                 pd -= es;                                  pd -= es;
                         }                          }
Line 153  loop: SWAPINIT(a, es);
Line 150  loop: SWAPINIT(a, es);
                 if (pb > pc)                  if (pb > pc)
                         break;                          break;
                 swap(pb, pc);                  swap(pb, pc);
                 swap_cnt = 1;  
                 pb += es;                  pb += es;
                 pc -= es;                  pc -= es;
         }          }
         if (swap_cnt == 0) {  /* Switch to insertion sort */  
                 for (pm = (char *) a + es; pm < (char *) a + n * es; pm += es)  
                         for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;  
                              pl -= es)  
                                 swap(pl, pl - es);  
                 return;  
         }  
   
         pn = (char *) a + n * es;          pn = (char *) a + n * es;
         r = min(pa - (char *) a, pb - pa);          r = min(pa - (char *) a, pb - pa);

Legend:
Removed from v.1.19  
changed lines
  Added in v.1.20

CVSweb <webmaster@jp.NetBSD.org>