merge sort (slow)