一.在实现归并排序之前首先了解递归过程:
递归过程简单来说就是在函数中自己调用自己。但是,在函数体中一定需要一个结束过程,对应函数体最不停调用自己的过程中何时终止。总的来说,递归的过程一般是缩小问题规模,靠近结束过程。在递归的过程中,会利用栈结构。每次函数执行过程中调用新的函数都会保存运行现场(包括局部变量和当前代码行等等),最外层的函数调用最早被压入栈中,也就是栈底,而最晚被调用的也就最早弹出,然后依次回调。
首先了解归并排序的基本过程:
归并排序将整个数列分解为多个子数列,将各个子数列在合并的过程中进行排序。e.g 现有数列{9,8,7,10,0,2,1,4}。
1.首先将数列分为左右两个子数列{9,8,7,10}和{0,2,1,4}
2.左子数列继续分解为{9,8}和{7,10},同时右子数列也分解为{0,2}和{1,4}。
3.{9,8}继续分解为{9},{8},其余数列同样。
4.{9}和{8}都都仅包含单个数,无需排列。
5.合并{9}和{8},8<9,所以合并后为{8,9},同时{7}和{10},也合并为{7,10},({0,2},{1,4}也是如此)。
6.{8,9}和{7,10}开始合并。现有指针left指向8,right指针指向7,和temp数组。比较8和7,7<8,所以temp[0]=7,right指针右移,指向10。
7.比较8和10,8<10,所以temp[1]=8,left指针右移,指向9。