Previous: bnd_bsearch, Up: Lists
partition a list about an object
#include <suplib/lists.h>void *partition( void *obj, void *p_obj, void *work, size_t s_obj, unsigned long n_obj, int (*obj_comp)(const void *obj1,const void *obj2) );
void *obj
- list of objects to partition
void *p_obj
- object about which to partition list. need not be in the list
void *work
- work area with size 2 *
s_obj
size_t s_obj
- size of an object in bytes
unsigned long n_obj
- number of objects in list
int (*obj_comp)(const void *obj1,const void *obj2)
- function which compares two objects and returns < 1, 0, > 1, depending if the first object is less than, equal to, or greater than the second
partitions the list obj[0 ... n]
into two sub-lists
obj[0 ... q]
and obj[q+1 ... n]
, such that
obj[i] (0 <= i <= q) <= pobj <= obj[j] (q < j <= n)
where pobj
is a supplied "pivot" point.
returns the top object in the first sub-list, i.e. obj[q]
.
pobj
need not be in the list. in this case, if no object is less
than pobj
, NULL
is returned.
See "Introduction to Algorithms", T.H.Kormen, C.E.Leiserson, and R.L. Rivest sec. 8.1, p.154.
Diab Jerius