adding a priority queue based merge sort