1、基本思想:
归并排序是分治法的一个非常典型的应用,它是将已有序的子序列进行合并,并使合并之后的序列仍然有序。将两个有序序列合并成一个序列,称为二路归并。
归并算法通常使用递归实现,按照n/2不断将数组拆分,直到子数组无法再拆分,然后递归的递归调用归并排序。
简单的说归并排序算法包括两步:
- 划分子表。
- 合并子表。
2、算法描述:
假设有数组arr[n],升序排列。
- 将n个元素分成两个含n/2个元素的子序列。
- 分别将两个子序列递归排序,最终原序列会拆分成n个子序列,每个含有一个元素。此时每个子序列都被当做已排好序。
- 合并两个已排好序的序列。
- 合并操作首先申请空间,大小为要合并的两个数组的和,用来存放排序后的数组。
- 在两个数组中分别取出第一个元素,将较小的元素放入新数组中。然后继续取该数组的下一个元素比较,直到任意一个数组比较完成。
- 将剩余数组的剩余元素直接放到新数组中即可。
3、Java实现:
|
|