递归实现
分析
归并排序:分治、递归思想
-
将一个数组A分成左右两部分A1、A2,那么对A的排序可以分为以下两步
1.将A1、A2分别排好序
2.将A1、A2两个各自有序的数组合并成一个有序数组,这个过程叫做归并(merge)
(分治思想) -
那么如何将A1、A2排好序呢?
使用对A排序的方式对A1、A2分别排序即可
(递归思想) -
用伪代码来表示:
sort(A){ sort(A1); sort(A2); merge(A1,A2) }
实现
归并排序的实现:
//任务:对数组进行递归排序
public static void mergeSort(int[] arr){
mergeSort(arr,0,arr.length-1);
}
//任务:归并排序的递归实现,实现arr[left,right]的有序
public static void mergeSort(int[] arr,int left,int right){
//优化点2:当数组比较小时,可以使用插入排序,效率更高。
//if(right-left+1<16) insertSort(int[] arr,int left,int right);
if(left>=right){
return;
}
else{
int center=(left+right)/2;//分开的左数组的最后一个下标
mergeSort