您的位置:首页 > 其它

排序——归并排序

2016-05-16 15:51 141 查看
       利用递归的思想,当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){
return;}
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++;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: