归并排序
归并排序
1.定义
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分**(divide)成一些小的问题然后递归求解,而治****(conquer)的阶段则将分的阶段得到的各答案“修补“在一起,即分而治之)**。
2.0个人理解
先把数组一直分 分成n组直到每组只有一个元素,然后在对每两组元素进行合并(因为他就是两组两组的分的就是用middle来分),合并时就先狗一个空数组,同时设置l1,l2为每一组元素的开头,再比较arr【l1】yuarr【l2】的大小,晓得就假如新数组,并++,最后再把这个数组的元素拷贝到原数组里。
3.图示讲解
4.0代码讲解
4.1不断分组的代码
终止条件同样也是l》=r,否则就是取中间值middle,再划分两组,最后进行合并
1 | public static void mergeSort(int left,int right,int[] arr){ |
4.2合并代码
找到两个数组收元素,i一个是left,j另一个是mid+1,新开一个数组copy,长度是right-left+1进行循环,当i<=mid,j<=right,比较arr【i】与arr【j】的大小,那个小,copy【k】就是那个,并且k++,小的那个下标j++,当有一个超过mid,那就一直是copy【k++】=arr【j+=】,若是超过right,那就是copy【k++】=arr【i++】,最后再把copy里的元素放回arr里
1 | public static void merge(int left,int right,int mid,int[] arr){ |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.