diff options
Diffstat (limited to 'src/lib/libc/stdlib/heapsort.c')
| -rw-r--r-- | src/lib/libc/stdlib/heapsort.c | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/src/lib/libc/stdlib/heapsort.c b/src/lib/libc/stdlib/heapsort.c index bd998fa357..ad3fffbcd9 100644 --- a/src/lib/libc/stdlib/heapsort.c +++ b/src/lib/libc/stdlib/heapsort.c | |||
| @@ -13,11 +13,7 @@ | |||
| 13 | * 2. Redistributions in binary form must reproduce the above copyright | 13 | * 2. Redistributions in binary form must reproduce the above copyright |
| 14 | * notice, this list of conditions and the following disclaimer in the | 14 | * notice, this list of conditions and the following disclaimer in the |
| 15 | * documentation and/or other materials provided with the distribution. | 15 | * documentation and/or other materials provided with the distribution. |
| 16 | * 3. All advertising materials mentioning features or use of this software | 16 | * 3. Neither the name of the University nor the names of its contributors |
| 17 | * must display the following acknowledgement: | ||
| 18 | * This product includes software developed by the University of | ||
| 19 | * California, Berkeley and its contributors. | ||
| 20 | * 4. Neither the name of the University nor the names of its contributors | ||
| 21 | * may be used to endorse or promote products derived from this software | 17 | * may be used to endorse or promote products derived from this software |
| 22 | * without specific prior written permission. | 18 | * without specific prior written permission. |
| 23 | * | 19 | * |
| @@ -34,11 +30,6 @@ | |||
| 34 | * SUCH DAMAGE. | 30 | * SUCH DAMAGE. |
| 35 | */ | 31 | */ |
| 36 | 32 | ||
| 37 | #if defined(LIBC_SCCS) && !defined(lint) | ||
| 38 | /*static char sccsid[] = "from: @(#)heapsort.c 8.1 (Berkeley) 6/4/93";*/ | ||
| 39 | static char *rcsid = "$Id: heapsort.c,v 1.1.1.1 1995/10/18 08:42:17 deraadt Exp $"; | ||
| 40 | #endif /* LIBC_SCCS and not lint */ | ||
| 41 | |||
| 42 | #include <sys/types.h> | 33 | #include <sys/types.h> |
| 43 | #include <errno.h> | 34 | #include <errno.h> |
| 44 | #include <stdlib.h> | 35 | #include <stdlib.h> |
| @@ -73,7 +64,7 @@ static char *rcsid = "$Id: heapsort.c,v 1.1.1.1 1995/10/18 08:42:17 deraadt Exp | |||
| 73 | * Build the list into a heap, where a heap is defined such that for | 64 | * Build the list into a heap, where a heap is defined such that for |
| 74 | * the records K1 ... KN, Kj/2 >= Kj for 1 <= j/2 <= j <= N. | 65 | * the records K1 ... KN, Kj/2 >= Kj for 1 <= j/2 <= j <= N. |
| 75 | * | 66 | * |
| 76 | * There two cases. If j == nmemb, select largest of Ki and Kj. If | 67 | * There are two cases. If j == nmemb, select largest of Ki and Kj. If |
| 77 | * j < nmemb, select largest of Ki, Kj and Kj+1. | 68 | * j < nmemb, select largest of Ki, Kj and Kj+1. |
| 78 | */ | 69 | */ |
| 79 | #define CREATE(initval, nmemb, par_i, child_i, par, child, size, count, tmp) { \ | 70 | #define CREATE(initval, nmemb, par_i, child_i, par, child, size, count, tmp) { \ |
| @@ -95,12 +86,12 @@ static char *rcsid = "$Id: heapsort.c,v 1.1.1.1 1995/10/18 08:42:17 deraadt Exp | |||
| 95 | * Select the top of the heap and 'heapify'. Since by far the most expensive | 86 | * Select the top of the heap and 'heapify'. Since by far the most expensive |
| 96 | * action is the call to the compar function, a considerable optimization | 87 | * action is the call to the compar function, a considerable optimization |
| 97 | * in the average case can be achieved due to the fact that k, the displaced | 88 | * in the average case can be achieved due to the fact that k, the displaced |
| 98 | * elememt, is ususally quite small, so it would be preferable to first | 89 | * element, is usually quite small, so it would be preferable to first |
| 99 | * heapify, always maintaining the invariant that the larger child is copied | 90 | * heapify, always maintaining the invariant that the larger child is copied |
| 100 | * over its parent's record. | 91 | * over its parent's record. |
| 101 | * | 92 | * |
| 102 | * Then, starting from the *bottom* of the heap, finding k's correct place, | 93 | * Then, starting from the *bottom* of the heap, finding k's correct place, |
| 103 | * again maintianing the invariant. As a result of the invariant no element | 94 | * again maintaining the invariant. As a result of the invariant no element |
| 104 | * is 'lost' when k is assigned its correct place in the heap. | 95 | * is 'lost' when k is assigned its correct place in the heap. |
| 105 | * | 96 | * |
| 106 | * The time savings from this optimization are on the order of 15-20% for the | 97 | * The time savings from this optimization are on the order of 15-20% for the |
| @@ -139,13 +130,11 @@ static char *rcsid = "$Id: heapsort.c,v 1.1.1.1 1995/10/18 08:42:17 deraadt Exp | |||
| 139 | * only advantage over quicksort is that it requires little additional memory. | 130 | * only advantage over quicksort is that it requires little additional memory. |
| 140 | */ | 131 | */ |
| 141 | int | 132 | int |
| 142 | heapsort(vbase, nmemb, size, compar) | 133 | heapsort(void *vbase, size_t nmemb, size_t size, |
| 143 | void *vbase; | 134 | int (*compar)(const void *, const void *)) |
| 144 | size_t nmemb, size; | ||
| 145 | int (*compar) __P((const void *, const void *)); | ||
| 146 | { | 135 | { |
| 147 | register int cnt, i, j, l; | 136 | size_t cnt, i, j, l; |
| 148 | register char tmp, *tmp1, *tmp2; | 137 | char tmp, *tmp1, *tmp2; |
| 149 | char *base, *k, *p, *t; | 138 | char *base, *k, *p, *t; |
| 150 | 139 | ||
| 151 | if (nmemb <= 1) | 140 | if (nmemb <= 1) |
