并归排序分别有两个动作,1,分:首先要将所有数据进行分组,分为1个数字一组,在这里可以使用回溯算法。2,合:合就是将这个数据进行排序后然后放入同一个数组中。
import java.util.Arrays;
public class mergesort {
public static void mergesort(int[] arr,int left ,int right,int [] temp)
{
if(left<right)
{
int mid =(left+right)/2;
mergesort(arr,left,mid,temp);
mergesort(arr,mid+1,right,temp);
merge(arr,left,mid,right,temp);
}
}
/**
*
* @param arr原始数组
* @param left初始索引
* @param mid中间索引
* @param right右边索引
* @param temp中转数组
*/
public static void merge(int[] arr,int left,int mid ,int right,int [] temp)//合并方法
{
int i= left;//i,j为左右有序序列初始索引
int j=mid+1;
int t=0;//temp的索引
//下面先是将数据进行比较进行填充到temp中
while(i<=mid&&j<=right)
{
if(arr[i]>arr[j])
{
temp[t]=arr[j];
t++;
j++;
}
else if(arr[j]>arr[i])
{
temp[t]=arr[i];
t++;
i++;
}
}
while(i<=mid)
{
temp[t]=arr[i];
t++;
i++;
}
while(j<=right)
{
temp[t]=arr[j];
t++;
j++;
}
t=0;
int templeft=left;
while(templeft<=right)
{
arr[templeft]=temp[t];
templeft++;
t++;
}
}
public static void main(String[] args) {
int[] arr = {8,4,5,7,1,3,6,2};
int temp[]=new int[arr.length];
mergesort(arr,0,arr.length-1,temp);
System.out.print(Arrays.toString(arr));
}
}