[prev] 81 [next]

External Mergesort (cont)

Rough file merging algorithm (not valid C)

// assumes N = 2^k for some integer k > 0
fileMerge(inFile, outFile, runLength, N)
{
   inf1 = open inFile for reading
   inf2 = open inFile for reading
   outf = open outFile for writing
   in1 = 0; in2 = runLength
   while (in1 < N) {
      seek to position in1 in inf1
      end1 = in1+runLength
      it1 = getItem(inf1)
      seek to position in2 in inf2
      end2 = in2+runLength
      it2 = getItem(inf2)
      while (in1 < end1 && in2 < end2) {
         if (less(it1,it2)) {
            write it1 to outf
            it1 = getItem(inf1); in1++
         }
         else {
            write it2 to outf
            it2 = getItem(inf2); in2++
         }
      }
      while (in1 < end1) {
         write it1 to outf
         it1 = getItem(inf1); in1++
      }
      while (in2 < end2) {
         write it1 to outf
         it1 = getItem(inf1); in1++
      }
      in1 += runLength; in2 += runLength;
   }
   
}