[Home]
[Contents]
[Chapter]
[Previous Algorithm]
[Next Algorithm]


Balances merge sort


sort() { int i, runs; extern int maxfiles, unit; extern char FilStat[]; extern struct rec LastRec[]; /*** Initialize input/output files ***/ OpenRead( 1 ); for (i=2; i<=maxfiles; i++) if ( i <=maxfiles/2 ) filstat[i]='-' ; else openwrite( i ); distribute(); do { /*** re-assign files ***/ for (i=1; i<=maxfiles; i++) if (filstat[i]== 'o') { openread( i ); lastrec[i]=ReadFile(i); } else openwrite( i ); for (runs=1; merge(nextfile()) !='done' ; runs++); } while (runs>1); return( unit ); };

C source (442.sort.c)



© Addison-Wesley Publishing Co. Inc.