排序——归并排序
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++;
}
}
//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++;
}
}
相关文章推荐
- java网络编程基础
- [RAC] oracle rac 后台进程
- python数据分析2:双色球 蓝红球分析统计
- Rsync command
- query根据name属性查找
- CentOS7 安装教程
- 构建新版本APP上传流程
- iOS下按钮同时实现圆角与阴影效果
- Android.mk 使用 环境 小结
- Android安全开发之浅谈密钥硬编码
- 使用WinDbg分析Dump文件(蓝屏示例)
- 前端页面存取数据
- IAP (In-App Purchase)中文文档
- Android开发笔记之《远程控制(MQTT|mosquitto) && (ProtocalBuffer | GRPC)》
- Swift讲解专题十一——属性
- Android弹性反弹:Facebook Rebound
- 与ListView不同,RecyclerView的嵌套解决
- gitbub上传代码
- Hdu-3336 Count the string(KMP + DP)
- 有容云——窥探Docker中的Volume Plugin内幕