排序——归并排序

来源:互联网 发布:软考初级程序员答案 编辑:程序博客网 时间:2024/05/21 19:43

       利用递归的思想,当N=1时,只有一个元素需要排序,为递归临界条件;否则,递归的将前半部分数据和后半部分数据各自归并排序,得到排序后的两部分数据,然后再将得到的两部分合并到一起。

  //mergeSort algorithm   public void mergeSort(int[] data){if(data == null || data.length<2)        return;int[] tmparray=new int[data.length];mergeSort(data,tmparray,0,data.length-1);}  //mergeSort例程;  public void mergeSort(int[] data,int[] tmparray,int left,int right)  {  if(left<right)  {  int center=left+(right-left)/2;  mergeSort(data,tmparray,left,center);  mergeSort(data,tmparray,center+1,right);  merge(data,tmparray,left,center+1,right);  }  }  //merge例程;  public void merge(int[] data,int[] tmparray,int leftpos,int rightpos,int rightend)  {  int leftend=rightpos-1;  int tmppos=leftpos; int index=leftpos;//记录没有更改时的leftpos,最后对data赋值时使用;  while(leftpos<=leftend&&rightpos<=rightend)  {  if(data[leftpos]<data[rightpos])  {  tmparray[tmppos++]=data[leftpos++];  }  else  {  tmparray[tmppos++]=data[rightpos++];  }  }  while(leftpos<=leftend)  {  tmparray[tmppos++]=data[leftpos++];  }  while(rightpos<=rightend)  {  tmparray[tmppos++]=data[rightpos++];  }  //将tmparray赋值给data;  while(index<=rightend)  {  data[index]=tmparray[index];  index++;  }  }



0 0
原创粉丝点击