算法学习归并排序
Posted teensspirit-code-life
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法学习归并排序相关的知识,希望对你有一定的参考价值。
1.算法思路:
(1)将待排序数组分为两份,利用递归将两份数组排好序
(2)将两个有序数组归并成一个有序数组。
实现方法:
a.设置两个指针,分别指向两个数组的开头,比较指针所指向的数字,将较小的数字加入一个辅助数组中,指针前移,直到其中一个指针溢出
b.将未溢出的数组剩余的元素加入辅助数组中
c.将辅助数组整体拷贝到原来的数组中
2.代码(JAVA):
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]; } } }
3.算法分析:
时间复杂度:O(N*logN)
以上是关于算法学习归并排序的主要内容,如果未能解决你的问题,请参考以下文章