The heart of merge sorting is merge procedure. Merge sorting is one of the best sorting algorithms due to its time complexity.
Time Complexity: Time Complexity of Merge Procedure ( O(n) ) + Time Complexity of Merge Sort.
T(n) = 2T(n/2) + O(n)
T(n) = O(nlogn)
Space Complexity: O(n) due to space taken by merge procedure + O(klogn) due to recursion tree. Thus, equivalent space complexity is O(n)
For self study of data-structure, refer this book by Sahni Horowitz.
To understand pointers in C, you may refer this book. This book explains 2D and 3D pointer in great detail.