1.复杂度
时间复杂度:O(nlogn)
注意,其他排序算法的空间复杂度是 O(1),而归并排序的空间复杂度很大,为 O(n)。
2.主要思想
其主要思想就是将数组分成两部分,进行归并,然后如此下去,继续分成两部分
归并的思想:左右两个数组对于下标处的值进行比较,小的放入数组中,然后对应的下表加1
如果有left或者right任一个数组加完那么另一方剩余的值直接放入arr中
3.代码
public class 归并排序 {
public static void main(String[] args) {
int []arr={1,2,5,4,6,12,1,45,5,5};
mergesort(arr, 0,arr.length);
for (int i= 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
//归并排序
public static void mergesort(int []arr,int start,int end){
int temp[]=new int[arr.length];
if (start+1>=end) {
return;
}
int mid=(start+end)/2;
mergesort(arr, start, mid);
mergesort(arr, mid, end);
int p=start,q=mid,r=start;
while (p<mid||q<end) {
if(q>=end||p<mid&&arr[p]<arr[q]){
temp[r++]=arr[p++];
}else {
temp[r++]=arr[q++];
}
}
for (int i = start; i <end; i++) {
arr[i]=temp[i];
}
}
}