归并排序
归并排序用的是分治的思想。分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。 这里的归并排序就是将一个序列分成多个序列,可分成每个序列只有一个元素,然后将挨着的两个区间的元素进行对比,然后排序。 我们可以用递归来完成这个分区间的步骤,直至每个区间只有一个元素,将左右区间的每个元素进行比较,较小的存放进辅助数组。 大致步骤:(记作左区间的指针为i,右区间的指针为) 1:建立辅助数组。 2:分区间(递归完成) 3:比较左右区间的的第一个值,如果左区间的较小,存入辅助数组,i++,如果右区间的数较小,存入辅助数组,j++,直到i=mid或者j=end。 4:将左区间或者右区间剩余的数存入到辅助数组中去(由于到了i=mid||j=mid的时候我们就不在比较了,所以会存在左区间的数或者右区间的数没有全部存入辅助数组中去。) 5:将辅助数组中的数存入原数组中去。 图解: 由图我们可以看到起始数组为:{80,30,60,40,20,10,,50,70}, 经过分解之后我们分成了8个数组:{80},{30},{60},{40},{20},{10},{50},{70}。 分解之后自然要合并: 第一步我们可以看到都是单个元素在比较大小,小的先存入到辅助数组。