[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.