归并排序

主要思想是先对序列进行分割,然后再进行归并排序。
如一个数组[1,2,3,4,5,6]
第一次分割为[1,2,3],[4,5,6]
第二次分割为[1,2],[3],[4,5],[6]
第三次分割为[1],[2],[3],[4],[5,[6]
第一次归并排序为[1],[2];[4],[5]
.
.
.
以此类推

public
class MergeSort { private double[] bridge; public MergeSort(double [] sorted){ if(sorted.length==0){ throw new NullPointerException("size is null"); } int sorted_length=sorted.length; bridge=new double[sorted_length]; } public void mergeso(double [] obj,int left,int right){ while(left<right){ int center=(left+right)/2; mergeso(obj,left,center); mergeso(obj,center+1,right); merge(obj,left,center,right); } } public void merge(double [] obj,int left,int center,int right){ int mid=center+1; int tem1=left; int tem2=left; while(left<=center && mid<=right){ if(obj[left]<obj[mid]){ bridge[tem1++]=obj[left++]; } else{ bridge[tem1++]=obj[mid++]; } } while(left<=center){ bridge[tem1++]=obj[left++]; } while(mid<=center){ bridge[tem1++]=obj[mid++]; } copy(obj,tem2,right); } public void copy(double [] obj,int left,int right){ while(left<=right){ obj[left]=bridge[left]; left++; } } }

 

posted on 2016-11-25 11:15  猫儿爹  阅读(253)  评论(0编辑  收藏  举报

导航