self-implement merge sort for list, very good