while read in the next block containing 1or more records do for(i=next record index; i<=last record index in block;i++) do while(key[i] < key[parent_of(i)]) exchange(record[i],record[parent_of(i)]; while(number of records>0) for(j=0;jkey[l_child(i)])||key[i]>key[r_child(i)]^2; i=smaller_i; if (key[l_child(i)]