归并排序

来源:互联网 发布:手机视频拼接软件 编辑:程序博客网 时间:2024/06/05 11:13

归并排序也是经常用到的排序方式之一了,速度很快,能够达到O(n logn)的级别。

总的来说,归并排序首先通过递归方法将一组数据两两分开,将两个数据按顺序排列好,然后,递归到上一层,将先前排列好的数据,再合并到一个数组里面。依次往上层递归,最终能够达到数组的排序。上一张图,解释归并排序的整个排序流程。此图从互联网得。


从图中可以清晰的看出归并排序的流程。就不做过多解释了,一开始,看到这种思路觉得这种想法很难理解,跟我们平常使用的选择排序啊,冒泡排序啊等等,完全不同。而且,对于递归算法来说,有时候会让我不清楚算法的执行顺序,看完归并排序,不仅使我掌握了一个非常牛逼的算法,而且,我对递归算法的认识也更深刻了。

//归并排序public class Merge {public void MergeSort(int []data,int left,int mid,int right){int third=left;int[] tempArr=new int[data.length];int center=mid+1;int temp=left;while(left<=mid&¢er<=right){if(data[left]<=data[center]){tempArr[third++]=data[left++];}else{tempArr[third++]=data[center++];}}while(left<=mid){tempArr[third++]=data[left++];}while(center<=right){tempArr[third++]=data[center++];}while(temp<=right){data[temp]=tempArr[temp++];}}public int[] sort(int[] data,int left,int right){if(left>=right)return null;int mid=(left+right)/2;sort(data,left,mid);sort(data,mid+1,right);MergeSort(data, left,mid ,right);return data;}public static void main(String[] args) {int [] array=new int[]{2,6,8,1,3,9,4};Merge m=new Merge();int[] newarray=m.sort(array,0,array.length-1);for(int i=0;i<newarray.length;i++){System.out.println(newarray[i]);}}}
以上就是完整的代码。可以自行试试。






1 0
原创粉丝点击