标签:两个指针 归并排序 col 时间 merge style void 归并 算法分析
(1)将待排序数组分为两份,利用递归将两份数组排好序
(2)将两个有序数组归并成一个有序数组。
实现方法:
a.设置两个指针,分别指向两个数组的开头,比较指针所指向的数字,将较小的数字加入一个辅助数组中,指针前移,直到其中一个指针溢出
b.将未溢出的数组剩余的元素加入辅助数组中
c.将辅助数组整体拷贝到原来的数组中
public class mergesort{ public static void mergeSort(int[] arr, int l, int r) { if(l<r){ int mid=l+(r-l)/2; mergeSort(arr,l,mid); mergeSort(arr,mid+1,r); merge(arr,l,r); } } public void merge(int[] arr,int l,int r){ int[] tmp=new int[r-l+1]; int mid=l+(r-l)/2;int p1=l; int p2=mid+1; int i=0; while(p1<=m&&p2<=r){ if(arr[p1]<arr[p2]) tmp[i++]=arr[p1++]; else tmp[i++]=arr[p2++]; } while(p1<=m) tmp[i++]=arr[p1]; while(p2<=r) tmp[i++]=arr[p2]; for(i=0;i<arr.length;i++){ arr[l+i]=tmp[i]; } } }
时间复杂度:O(N*logN)
标签:两个指针 归并排序 col 时间 merge style void 归并 算法分析
原文地址:https://www.cnblogs.com/teensSpirit-code-life/p/11722514.html