1. 归并排序
将数组中数字按从小到大顺序排序.
2. 实现思路
一句话:分而治之。
将数组先一分为二,二分为四,一直到最终分解出2个数为止。拆分时,使用递归拆分。然后将分解出来的2个数当做2个数组,从左边开始比较两个数组的大小。将左右两边数值小的数字拷贝到临时数组中。
代码实现思路分两部分:
第一部分:合并
判断左右两边数字的大小,将小的数字拷贝到临时数组中。
再比较下一个,直到左右两边有一个数字拷贝完成。
将剩余部分(左边剩余或者右边剩余的)再拷贝到临时数组的末尾。
第二部分:拆分
假设原始数组左边的起始下标为left(初始是0),最右边下标为right。
将原始数组的长度除以2,获得中间的下标mid。
将0-mid作为一个左边的新数组,(mid+1) - right部分作为右边部分的新数组,再进行切分,使用递归切分到最后。
判断条件是当 left < right满足时,即为可以再拆分,再调用自身。
重点: 每次拆分完成后,需要调用合并功能来完成已经排序好的数字的合并。
3. 代码实现
/**
* 归并排序
* @Author: KingWang
* @Date: 2021/6/17
* @Desc:
**/
public class MergeSort {
public static void main(String[] args) {
int[] arr = {
5,2,4,6,1,7,8,3};
int[] temp = new int[arr.length];
System.out.println