/* * * Optimal list-merge sorting algorithm with exponential merge schedule. * * From: Software Development International, Winter 1991. * * This implementation by Jeremy Harris jgh@imptld.com * * Adapted into toolkit by Martin Poole mpoole@cix.compulink.co.uk * ** ** WARNING !! WARNING !! WARNING !! WARNING !! WARNING !! WARNING !! ** ** Any changes to be made to this file should first be checked with ** mplib1 source control for library integrity. ** ** mplib1 source control can be reached at mplib1@quatermass.co.uk ** * $Source$ * $Author$ * $Date$ * $Revision$ * * $Log$ * ******************************************************************************* */ #ident "$Header$" /* ------------------------------------------------------------------ defines ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ includes ------------------------------------------------------------------ */ #include #include #include #include /* ------------------------------------------------------------------ variables ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ code starts here ------------------------------------------------------------------ */ struct lmsortp * lmsort_init( void* base, size_t nel, size_t width, struct lmsortp *dp ) { struct lmsortp *dp2; int i; if (dp==NULL) dp = malloc( nel * sizeof(struct lmsortp) ); if (dp) { /* we can only sort if there is enough memory */ dp2=dp; for (i=0; inext = dp2+1; dp2->dp = base; dp2++; base = (void *)( ((char *)base) + width ); } dp2--; dp2->next=NULL; } return(dp); } void lmsort_end( struct lmsortp *dp ) { if (dp) { free(dp); } return; } /* -- End of File -- */